Angular JS:属性不受$ scope影响......?

时间:2014-07-26 17:55:31

标签: angularjs data-binding angularjs-scope

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;属性本身不是更新,更不用说依赖它的伪元素......

1 个答案:

答案 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

} ])