Angular新手在这里。 我有以下div:
<div id="mainfr" data-curpos="dy[ {{curPosObj.dy}} ]" ...>blah blah </div>
在我的控制器中,我有:
var nxtest = angular.module('nxtest', []);
var appController = nxtest.controller('AppCtrl', ['$scope', function ($scope) {
$scope.curPosObj = { dir: "down", dy:5 };
$scope.clr = window.setTimeout(function(){ $scope.curPosObj.dy = 777;
window.clearTimeout($scope.clr); }, 5000); //see if the attr responds to a random change
}])
在firebug中,检查范围对象表明它确实已被修改。我想了解为什么绑定属性{{curPosObj.dy}}没有被绑定&#39;并且视图不会响应不断变化的值?非常感谢提前。
更新:根据建议添加了对plunker的链接 - 红色文字永远不会更改: http://plnkr.co/edit/HJxEpgR8VepxuT47zJDJ?p=preview
更新2 :好的,所以这里可能会有一个单独的问题 - 红色文本位于一个伪元素中,其contrent属性取决于主divs属性...而我不是在任何地方调用setAttribute ......但无论如何:在firebug中,&#39; data-curpos&#39;属性本身不是更新,更不用说依赖它的伪元素......
答案 0 :(得分:1)
这是因为角度没有跟踪范围变化超出dygest周期和window.setTimeout
那种情况。您应该使用$timeout
服务而不是window.setTimeout
,或者将范围变为$scope.$apply
的代码
angularjs API reference - $timeout service
angularjs API reference - scope guide
试试这个:
var nxtest = angular.module('nxtest', []);
var appController = nxtest.controller('AppCtrl', ['$scope', '$timeout',
function($scope, $timeout) {
$scope.curPosObj = {
dir: "down",
dy: 5
};
$scope.clrPromise = $timeout(function() {
$scope.curPosObj.dy = 777;
}, 5000); //see if the attr responds to a random change
} ])