Javascript 自定义属性双向绑定不起作用
在这个例子中,我面临两个问题Javascript 自定义属性双向绑定不起作用,javascript,angularjs,Javascript,Angularjs,在这个例子中,我面临两个问题 显然,{{moo}}没有更新。表达式{{moo}}不应该是双向绑定吗 可能是因为第一个问题,我在链接回调中关于指令myvarattr值的监视表达式没有更新 我错过了什么?谢谢你的帮助 查看 结果:{{moo}} 指令 App.directive('myDirective', function () { return { restrict: 'A', scope:{ myVar: '='
{{moo}}
没有更新。表达式{{moo}}
不应该是双向绑定吗myvar
attr值的监视表达式没有更新
结果:{{moo}}
指令
App.directive('myDirective', function () {
return {
restrict: 'A',
scope:{
myVar: '='
},
link: function (scope, element, attrs) {
scope.$watch(scope.myVar, function() {
console.log('my var changed to: ', scope.myVar);
});
}
};
});
控制器
var ctrls = angular.module('controllers',[]);
ctrls.controller('myController', ['$scope', function ($scope) {
$scope.moo = 0;
var t = setInterval(function(){
$scope.moo++;
},1000);
}]);
使用
$interval
,而不是setInterval
,angular在使用setTimeout
时不会运行摘要循环,因此您的指令范围不知道有任何更改。使用$interval
,而不是setInterval
,angular在使用setTimeout
时不会运行摘要循环,因此,您的指令范围不知道有任何更改。Angular使用手表重新计算视图中的变量。这些手表内置angular的异步功能,如$timeout
,$http
等。当使用本机设置超时时,angular的摘要周期不会拾取该变化
使用angular的$interval
服务代替本机javascript间隔:
var t = $interval(function(){
$scope.moo++;
},1000);
不要忘记注入控制器:
ctrls.controller('myController', ['$scope', '$interval', function ($scope, $interval) {
要使$watch
工作,请观察按键而不是对象:
scope.$watch('myVar', function() {
Angular使用手表重新评估视图中的变量。这些手表内置angular的异步功能,如$timeout
,$http
等。当使用本机设置超时时,angular的摘要周期不会拾取该变化
使用angular的$interval
服务代替本机javascript间隔:
var t = $interval(function(){
$scope.moo++;
},1000);
不要忘记注入控制器:
ctrls.controller('myController', ['$scope', '$interval', function ($scope, $interval) {
要使$watch
工作,请观察按键而不是对象:
scope.$watch('myVar', function() {
您可能是指$interval
而不是$timeout
您可能是指$interval
而不是$timeout
10x,它解决了第一个问题,但是指令中的my$watch
表达式没有更新。您需要查看'myVar'
(键),而不是scope>scope.myVar
(对象引用)谢谢,感谢它10x解决了第一个问题,但指令中我的$watch
表达式仍然没有更新。您需要查看'myVar'
(键),而不是scope.myVar
(对象引用)谢谢,感谢