我目前正在阅读有关角度js的ng-book,并且有两个代码段。
第一个处理$ parse服务,可在此处找到:http://jsbin.com/UWuLALOf/1/edit
第二个涉及$ interpolate,可在此处找到:http://jsbin.com/oDeFuCAW/1/edit
这些都没有按预期工作(我认为)。他们应该现场更新视图。我尝试在本地创建第一个示例,但我得到了相同的结果。我想也许这是由于角度的版本,但因为它使用谷歌api的特定版本,这应该不是一个问题。我想弄清楚解析和插值服务在这里做了什么,所以任何想法都非常感激。
由于
C
答案 0 :(得分:1)
不应将newVal参数传递给$ parse函数,而应传递表达式' 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);
}
});
答案 1 :(得分:0)
这是你附加到网站的角度版本不是稳定版本,请使用此
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.20/angular.min.js"></script>
但是代码没有按预期工作
答案 2 :(得分: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);
}
});
$ scope。$ watch已设置并正在监视expr变量的变化,该变量通过ng-model与输入值绑定
如果更改输入中的expr值,则会将其发送到$ parse进行评估(1 + 1应该出现2,名称应该出现{&#34; name&#34;:&#34; Ari Lerner&#34 ;} 在这种情况下)。 $ parse会将字符串表达式转换为函数,因此请记住这一点,你应该知道会发生什么。
在第二个例子中,当通过textarea更改正文部分时,模板通过$ interpolate呈现,它将评估{{}}内的任何内容,然后呈现html。