(消息,代码等,有点修改以解释问题)
错误:
Syntax Error: Token 'promiseObject' is unexpected, expecting [:] at column 3 of the expression [{{promiseObject?promiseObject.activeDEM:0}}] starting at [promiseObject?promiseObject.activeDEM:0}}].
以下代码解释了问题:
使用的HTML:
<count-up id="feafdcds" duration="1" end-val='{{promiseObject?promiseObject.value:0}}' class="number" ></count-up>
使用的指令具有独立的范围。如果移除隔离范围,则错误消失,但是我不知道如何观察我的属性以进行更改。
angular.module('core-metronic').directive('countUp', ['$filter',
function ($filter) {
return {
restrict: 'E',
scope: {
endVal: '='
},
link: function ($scope, $el, $attrs) {
$scope.$watch('endVal',function(newValue,oldValue)
{
if(newValue)
alert(newValue);
},true);
//...more code...
}
}
}
]);
答案 0 :(得分:0)
您不能使用有角度的双向绑定
endVal: '='
带有角度表达式
{{promiseObject?promiseObject.value:0}}
在值更改的情况下使用双向绑定角度尝试时,将新值设置为绑定变量。 在您的情况下,您想要绑定到endVal的不是变量而是表达式。所以有角度不知道该如何处理。
您有两种选择:
如果你不需要指令之外的endVal值,你可以 使用
endVal: '@'
而是删除模板中的评估大括号,如下所示
<count-up id="feafdcds" duration="1" end-val='promiseObject?promiseObject.value:0' class="number" ></count-up>
这将起作用并将endVal的值设置为promiseObject.value或0。 因此,您必须小心,这会将值绑定为字符串,因此实际值将为“0”或包含promiseObject值的字符串。你可能不得不再将其转换为其他地方的数字。但是这不会更新指令之外的promiseObject的值。
如果您需要在promiseObject中作为promiseObject.value的指令之外的更新值,则必须将endVal绑定到变量。所以你可以保留你的
endVal: '='
但您必须将模板更改为
<count-up id="feafdcds" duration="1" end-val='promiseObject.value' class="number" ></count-up>
这样,当endVal更改时,Angular将始终更新promiseObject.value的值。但这也意味着您必须注意promiseObject始终存在(并且是对象)在外部控制器中的某个位置。 此外,您必须应用默认值0,您尝试在其他地方使用您的表达式。您也可以在外部控制器中执行此操作,例如通过
初始化promiseObjectpromiseObject = {
value: 0
}