javascript - ionic ,AngularJs : Directive attribute $watch stops working after view is rendered

标签 javascript angularjs angularjs-directive ionic-framework

我想为 ionItem 创建一个属性指令,并且希望它观察自己的值:

<ion-item ng-repeat="item in items" my-dir="{{data.watchedValue}}">….</ion-item>

我在指令中创建正确的监视语句时遇到问题。监视在初始 View 渲染期间仅执行一次。此后,当 data.watchedValue 更改时,不会调用它。

该指令的具体之处在于它是 ionItem 指令的子项。

我尝试了多种方法(请参阅 my-dir 源代码中的注释),但没有一个有效。

指令:

.directive('myDir', function() {
  return {
    restrict: 'A',
    require:  '^ionItem',
    link: function(scope, element, attr, itemCtrl) {
      console.log('my-dir initial value: ' + attr.myDir);

      if (angular.isDefined(attr.myDir)) {
        // scope.$watch("(" + attr.myDir + " === \"true\")", function(value) {
        // scope.$watch('!!(' + attr.myDir + ')', function(value) {
        scope.$watch(attr.myDir, function(value) {
          console.log('my-dir watch new value:  ' + value);
        });
      }

    } // link
  }; // return
}) // directive

简化的指令用法:

<button class="button" ng-click="data.watchedValue = !data.watchedValue">
  Change Value
</button>

<ion-content>
  <ion-list>
    <ion-item ng-repeat="item in items" my-dir="{{data.watchedValue}}">
      Item {{ item.id }}. Watched property: {{ data.watchedValue }}
    </ion-item>
  </ion-list>
</ion-content>

Code Pen有完整的例子。按更改值按钮...更改值。

在初始显示后观察控制台是否有任何日志。

最佳答案

您应该只是将作用域变量名称传递给指令attribute

<ion-item ng-repeat="item in items" my-dir="data.watchedValue">
  Item {{ item.id }}. Watched property: {{ data.watchedValue }}
</ion-item>

您可以使用 attrs.$observe 而不是 $scope.$watch,它基本上会监视 {{}}在属性上指定的插值。

If data.watchedValue has object then I'd highly recommend to go for 1st approach.

关于javascript - ionic ,AngularJs : Directive attribute $watch stops working after view is rendered,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39384314/

相关文章:

angularjs - 如何自动使 Angular js 中的本地存储值过期?

javascript - 对谷歌条形图进行排序

javascript - 多个ajax请求

javascript - AngularJS orderBy 与 ngModel 相同的属性抛出 $digest 错误

javascript - 使用 Angular 发送 ajax 请求以获取 .json 文件时出错?

angularjs - 使用 AngularJs 进行浮点范围验证

javascript - Angular中多层指令之间的通信

javascript - 对象没有转换成函数。未捕获的类型错误 : Cannot read property 'call' of undefined

javascript - 将数组展开为没有父 ID 但有级别的树

javascript - 更改 Javascript 中的单位