1

我创建了ngMap
并且该指令不监视任何属性值,因为属性名称是动态的(太多情况)。

但是,仅当指令用户使用双花括号将属性值赋予动态时,我才想将 $observe 应用于属性

我在这里compile尝试使用函数和函数来检测用户是否使用双花括号link,但还没有运气。

解释一下,从下面的代码

  <body ng-app="myApp" ng-controller="MyCtrl">
    <div my-dir foo="{{foo}}" bar="bar"></div>
  </body>

我想检测属性foo值是动态的,但属性bar值不是。

我试过这段代码来检查它,但没有成功。

var app = angular.module("myApp", []);
app.controller('MyCtrl', function($scope) {
  $scope.foo = "FOO";
});
app.directive('myDir', function() {
  return {
    compile : function(tele, tattr) {
     return {
      pre : function(scope, iele, iattrs) {
        console.log('pre', iattrs);  // this is the same as the below
      },
      post : function(scope, iele, iattrs) {
        console.log('post', iattrs);
      }
     };
    }
  }
});

我的问题是如何通过 AngularJS 检测属性值是否是动态的?

4

1 回答 1

1

您可以通过获取元素本身的属性值来检查非插值值,通过elem.attr().

演示

app.directive('myDir', function() {
  return function(scope, elem, attr) {
    var regex = /{{.*}}/;

    if(regex.test(elem.attr('foo'))) {
      attr.$observe('foo', function(value) {
        // observe
        console.log('observing foo');
      });
    }

    if(regex.test(elem.attr('bar'))) {
      attr.$observe('bar', function(value) {
        // observe
        console.log('observing bar');
      });
    }

  }
});
于 2014-08-24T21:39:51.897 回答