$ parse()的第二个参数是什么?

BiAiB

今天,在查看ngOptions.js源代码时遇到了这个问题

getWatchables: $parse(valuesFn, function(values) {
        // Create a collection of things that we would like to watch (watchedArray)
        // so that they can all be watched using a single $watchCollection
        // that only runs the handler once if anything changes
        var watchedArray = [];
        values = values || [];

        Object.keys(values).forEach(function getWatchable(key) {
          var locals = getLocals(values[key], key);
          var label = displayFn(scope, locals);
          var selectValue = getTrackByValue(values[key], locals);
          watchedArray.push(selectValue);
          watchedArray.push(label);
        });
        return watchedArray;
      }),

但是$ parse的官方文档没有指定任何第二个参数。

它有什么作用 ?

古林·谢尔格

资料来源

v1.3.4:

function addInterceptor(parsedExpression, interceptorFn) {
  if (!interceptorFn) return parsedExpression;
  var watchDelegate = parsedExpression.$$watchDelegate;

  var regularWatch =
      watchDelegate !== oneTimeLiteralWatchDelegate &&
      watchDelegate !== oneTimeWatchDelegate;

  var fn = regularWatch ? function regularInterceptedExpression(scope, locals) {
    var value = parsedExpression(scope, locals);
    return interceptorFn(value, scope, locals);
  } : function oneTimeInterceptedExpression(scope, locals) {
    var value = parsedExpression(scope, locals);
    var result = interceptorFn(value, scope, locals);
    // we only return the interceptor's result if the
    // initial value is defined (for bind-once)
    return isDefined(value) ? result : value;
  };

  // Propagate $$watchDelegates other then inputsWatchDelegate
  if (parsedExpression.$$watchDelegate &&
      parsedExpression.$$watchDelegate !== inputsWatchDelegate) {
    fn.$$watchDelegate = parsedExpression.$$watchDelegate;
  } else if (!interceptorFn.$stateful) {
    // If there is an interceptor, but no watchDelegate then treat the interceptor like
    // we treat filters - it is assumed to be a pure function unless flagged with $stateful
    fn.$$watchDelegate = inputsWatchDelegate;
    fn.inputs = [parsedExpression];
  }

  return fn;
}

根据上面的示例和angularjs的来源,第二个参数允许您将类似变换的逻辑应用于解析结果。

https://github.com/angular/angular.js/blob/master/src/ng/directive/ngOptions.js#L461

// We will re-render the option elements if the option values or labels change
scope.$watchCollection(ngOptions.getWatchables, updateOptions);

似乎,它用于为ngOptions源中的手表提供单一方式。它触发名称和/或标签的更改。如果不使用该表,则该表仅可用于更改标签或仅用于更改值,而不能同时用于两者。

角度代码中使用的其他示例

1.观看ng-bind

  var ngBindHtmlWatch = $parse(tAttrs.ngBindHtml, function getStringValue(value) {
    return (value || '').toString();
  });

在这里,我们基于转换为字符串的$ parse值构造一个手表。似乎可以在$ digest循环中进行更好和更简单的比较。

2.监视指令中“ =”范围的参数

var parentValueWatch = function parentValueWatch(parentValue) {
  if (!compare(parentValue, isolateBindingContext[scopeName])) {
  // we are out of sync and need to copy
  if (!compare(parentValue, lastValue)) {
  // parent changed and it has precedence
  isolateBindingContext[scopeName] = parentValue;
  } else {
  // if the parent can be assigned then do so
  parentSet(scope, parentValue = isolateBindingContext[scopeName]);
}
}
return lastValue = parentValue;
};

如您所见,我们只是根据脏检查使范围值保持同步。这就是为什么我们需要第二个$ digest循环来触发指令的内部监视的原因。


概括

似乎这是一种从繁琐的事情转变为一件容易的事情的方法,=在$ digest-cycle中应该可以通过简单的事情来进行比较我们是否应该触发监视就需要得出结论。

它还可以用作放置手表通用逻辑的方法。它允许编写一次,并在需要$ parsed值的所有情况下使用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

第二个参数是什么?

来自分类Dev

gulp任务的第二个参数是什么意思:

来自分类Dev

此jquery select语句中的第二个参数是什么?

来自分类Dev

扩展协议上第二个参数的用途是什么

来自分类Dev

第二个参数在此签名中是什么意思?

来自分类Dev

jQuery选择器带有第二个参数是什么意思?

来自分类Dev

array_length()函数中的第二个参数是什么?

来自分类Dev

ReactDOM.render中的第二个参数是什么意思?

来自分类Dev

迁移Laravel的外部方法中的第二个参数是什么?

来自分类Dev

VB中double.tryparse方法的第二个参数的含义是什么

来自分类Dev

os.execl()中第二个参数的用法是什么

来自分类Dev

ClickHouse函数中的第二个参数toDateTime64是什么意思?

来自分类Dev

该ffmpeg命令中倒数第二个参数的作用是什么?

来自分类Dev

第二个参数在dblite的open中是什么意思

来自分类Dev

Angular指令中第二个参数作为数组的作用是什么?

来自分类Dev

Python中iter函数的第二个参数是什么?

来自分类Dev

ArrayAdapter() 构造函数中的第二个参数是什么?

来自分类Dev

第二个登录屏幕是什么?

来自分类Dev

为什么它适用第二个参数?

来自分类Dev

OpenProcess第二个参数

来自分类Dev

make_transform_iterator作为推力::减少算法中第二个参数的意义是什么?

来自分类Dev

是什么触发了“ Hello Dojo!”中第二个参数的执行要求require()。教程

来自分类Dev

基于Typescript的React组件的通用参数中的第二个参数代表什么?

来自分类Dev

基于Typescript的React组件的通用参数中的第二个参数代表什么?

来自分类Dev

Go的Syscall()中的第二个r2返回值是什么?

来自分类Dev

第二个www数据是什么意思?

来自分类Dev

第二个Cookie的确切目的是什么?

来自分类Dev

Huggingface的Bert的第二个输出是什么意思?

来自分类Dev

MFCCs数组中的第二个数字是什么?

Related 相关文章

  1. 1

    第二个参数是什么?

  2. 2

    gulp任务的第二个参数是什么意思:

  3. 3

    此jquery select语句中的第二个参数是什么?

  4. 4

    扩展协议上第二个参数的用途是什么

  5. 5

    第二个参数在此签名中是什么意思?

  6. 6

    jQuery选择器带有第二个参数是什么意思?

  7. 7

    array_length()函数中的第二个参数是什么?

  8. 8

    ReactDOM.render中的第二个参数是什么意思?

  9. 9

    迁移Laravel的外部方法中的第二个参数是什么?

  10. 10

    VB中double.tryparse方法的第二个参数的含义是什么

  11. 11

    os.execl()中第二个参数的用法是什么

  12. 12

    ClickHouse函数中的第二个参数toDateTime64是什么意思?

  13. 13

    该ffmpeg命令中倒数第二个参数的作用是什么?

  14. 14

    第二个参数在dblite的open中是什么意思

  15. 15

    Angular指令中第二个参数作为数组的作用是什么?

  16. 16

    Python中iter函数的第二个参数是什么?

  17. 17

    ArrayAdapter() 构造函数中的第二个参数是什么?

  18. 18

    第二个登录屏幕是什么?

  19. 19

    为什么它适用第二个参数?

  20. 20

    OpenProcess第二个参数

  21. 21

    make_transform_iterator作为推力::减少算法中第二个参数的意义是什么?

  22. 22

    是什么触发了“ Hello Dojo!”中第二个参数的执行要求require()。教程

  23. 23

    基于Typescript的React组件的通用参数中的第二个参数代表什么?

  24. 24

    基于Typescript的React组件的通用参数中的第二个参数代表什么?

  25. 25

    Go的Syscall()中的第二个r2返回值是什么?

  26. 26

    第二个www数据是什么意思?

  27. 27

    第二个Cookie的确切目的是什么?

  28. 28

    Huggingface的Bert的第二个输出是什么意思?

  29. 29

    MFCCs数组中的第二个数字是什么?

热门标签

归档