在角度js中使用$ parse

rin*_*esh 22 javascript angularjs

关于AngularJS使用位置$parse的任何想法.

请提供清楚描述的任何示例或链接.

Tyl*_*nis 25

当运行$ digest循环时,Angular会自动运行$ parse,基本上$ parse是angular计算表达式的方式.如果要手动解析表达式,可以将$ parse服务注入控制器并调用服务为您执行解析.

这是从ng-book剪下的代码,然后观察表达式.

<div ng-controller="MyCtrl">
  <input ng-model="expr" type="text" placeholder="Enter an expression" />
    <h2>{{ parsedValue }}</h2>
</div>
Run Code Online (Sandbox Code Playgroud)

然后在我们的模块中,

angular.module("myApp", [])
 .controller('MyCtrl',['$scope', '$parse', function($scope, $parse) {
    $scope.$watch('expr', function(newVal, oldVal, scope) {
      if (newVal !== oldVal) {
        // Let's set up our parseFun with the expression
        var parseFun = $parse(newVal);
        // Get the value of the parsed expression
         $scope.parsedValue = parseFun(scope);
      }
    });
 }]);
Run Code Online (Sandbox Code Playgroud)

  • 尼斯.我有一个小小的,无关的问题.你为什么检查newVal!== oldVal?如果值没有改变,Angular不会自动不触发$ watch回调函数,从而保证newVal和oldVal在函数内部执行时是不同的吗? (2认同)
  • @NikoBellic:是的。大多数时候。:)当视图初始化并运行第一个摘要时,首先为Angular运行watch表达式以保存初始值以供以后比较。第一次通话具有相同的值。如果尚未发生更改,则`if`语句可确保我们忽略此首次调用。 (2认同)

Cla*_*ies 10

你可能不会直接使用$ parse,但它是将角度表达式转换为JavaScript函数的原因.表达式是类似JavaScript的代码片段,通常放在绑定中,例如{{ expression }}.