2014-09-03 20 views
0

我目前正在阅读ng-book for angular js,并且已经涉及两个示例代码段。ng-book示例不能按预期工作

与$解析服务的第一交易和可以在这里找到:http://jsbin.com/UWuLALOf/1/edit

与$第二个交易内插,可以在这里找到:http://jsbin.com/oDeFuCAW/1/edit

是否按预期工作这些都不(我认为)。他们应该更新现场视图。我试过在本地创建第一个例子,但我得到了相同的结果。我想也许这是由于角度的版本,但因为它使用的是谷歌API的特定版本,所以这不应该成为问题。我想弄清楚解析和内插服务在这里做什么,所以任何想法非常赞赏。

感谢

Ç

回答

0

这beacues您连接到网站的角度版本不是稳定的版本,使用该

<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.20/angular.min.js"></script> 

但尽管如此代码不按预期工作

0

该代码正常工作,但很可能你并不期待你应该做什么:)

让我们一次一个:

$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, set it on the scope for output 
     scope.parsedExpr = parseFun(scope); 
    } 
    }); 

的$范围$手表是设置并监控TN的EXPR变量,它通过NG-模型并列的输入值发生变化

如果你改变输入中的expr值,发送到$ parse进行评估(在这种情况下,1 + 1应该出现2,name应该出现{“name”:“Ari Lerner”})。 $ parse会将字符串表达式转换为函数,因此考虑到这一点,您应该知道该期待什么。

在第二个示例中,当通过textarea更改正文部分时,将通过$ interpolate呈现模板,该插值将评估{{}}内的任何内容,然后呈现html。

+0

确保$解析返回的功能,但该功能,然后在下一行执行。 html的设置方式是一个非常明确的指示,parsedExpr应该等同于newVal。第二个例子也是如此。 – Cathal 2014-09-03 16:01:44

+0

我不明白你的意思,上面说的是否有问题? – alou 2014-09-03 19:48:28

+0

据我了解,$ parse会评估表达式,就好像我们把它放在双花括号{{}}中一样。所以我们可以评估“1 + 1”或调用$ scope的任何属性? – Timbergus 2016-04-13 15:48:22

1

不是传递的newval参数去$解析功能,您应该通过一个表达式的“expr的”

$scope.$watch('expr', function(newVal, oldVal, scope) { 
    if (newVal !== oldVal) { 
     // Let's set up our parseFun with the expression 
     var parseFun = $parse('expr'); 
     // Get the value of the parsed expression, set it on the scope for output 
     scope.parsedExpr = parseFun(scope); 
    } 
}); 
+0

真棒,砰的一声。非常感谢,一直在尝试这一整天:-) – 2017-08-24 12:24:39