0

我创建了一个带有隔离作用域的自定义指令,该指令使用双向数据绑定回到父作用域。范围/绑定似乎都正常工作,但模板/视图在更改时不会自动更新 dom 中的绑定属性。我可以通过阅读指令的模型来强制 dom 更新。

http://plnkr.co/edit/vPGm1oO0sSaHVvcrp2Ev

注意:在这个 plunkr 示例中,我使用的是 wiglet 1 范围内的 isActive 属性作为绑定属性。请注意,我在创建范围时将值打印到控制台,并且在 2 秒后通过 window.timeout... 要查看 dom 更改,请单击任一 wiglets 上的“打印”按钮,它只是将 isActive 的值再次打印到控制台。这会导致 dom 更新。

这是一个错误,还是我做错了什么?

4

1 回答 1

3

AngularJS 只在作用域摘要周期内更新绑定变量;对于 Angular 托管事件(ng-click等),这通常会自动发生,但在异步代码中,例如 a setTimeout,您必须手动调用Scope#$apply()or Scope#$digest()

$window.setTimeout(function(){
  $scope.$apply(function() {
    $scope.wiglets[0].isActive = true;
    console.log("Wiglet 1 isActive:", $scope.wiglets[0].isActive);
  });
}, 2000);

这很常见,setTimeout因为 AngularJS 有一个内置服务,称为$timeout,它会为您执行此操作:

$timeout(function(){
  $scope.wiglets[0].isActive = true;
  console.log("Wiglet 1 isActive:", $scope.wiglets[0].isActive);
}, 2000);

示例:http ://plnkr.co/edit/XDK06uhYMNcI6fs6SuHP?p=preview

于 2013-09-11T23:01:56.033 回答