何时何地使用$ eval和$ parse

时间:2015-12-21 12:13:20

标签: angularjs

在angularjs中使用$ eval和$ parse的时间和地点。

eReaderBook.controller("mainCtrl",function($scope){
    $scope.test = "asdasd";
    var s = "{{test}}";
    console.log($scope.$eval("s"))
})

为什么console.log返回undefined。

3 个答案:

答案 0 :(得分:0)

eReaderBook.controller("mainCtrl",function($scope){
    $scope.test = "asdasd";
    var s = "test";
    console.log($scope.$eval(s))
})
$scope.$eval不同,

eval()已经预期AngularJS的公认格式。 此外,不需要eval中的"

答案 1 :(得分:0)

$ parse是一个Angular服务,它将表达式转换为函数。然后可以调用该函数并传递上下文(通常是作用域)以检索表达式的值。

$ eval是一个范围方法,它在当前范围上执行表达式并返回结果。

有关更多信息,请参阅:

http://ng.malsup.com/#!/$parse-and-$eval

https://docs.angularjs.org/api/ng/service/$parse

答案 2 :(得分:0)

由于以下原因,您未定义。

$ eval方法适用于范围变量。这里你的变量s只是一个普通的javascript变量。但是,如果您尝试按如下方式记录'test'。您将看到正在打印的正确值。

console.log($scope.$eval("test"))

如果你试着没有引用如下

$scope.$eval(s)

然后你会找到

  

语法错误:令牌' {'无效密钥

因为s的值是{{test}}。因此,eval将尝试从范围中找到$ scope。{{test}}的值,该值无效且语法错误。

$scope.$eval('a+b')以上的内容意味着$scope.a+$scope.b

所以简单地说,你可以在有角度的绑定块{{ expression }}内写的那些表达式,你也可以在$ eval 方法中写为字符串。

{{WHAT EVER YOU CAN WRITE HERE}}
$scope.$eval('YOU CAN WRITE HERE ALSO');