AngularJS指令编译函数接收带有未解析的标记语言的DOM

时间:2015-12-22 23:15:17

标签: angularjs angularjs-directive

我想创建一个指令,根据id禁用一些UI元素。我正在ng-repeat元素中动态创建id。

要做到这一点,我正在使用指令。我的问题是当调用编译函数时,DOM仍然有标记,我的id属性看起来像{{iteration_object.id}}而不是“myObjectId” 这是一个例子

`http://jsfiddle.net/psLkyofu/

我尝试使用链接功能而不是编译,但我遇到了同样的问题。

欢迎任何帮助!

1 个答案:

答案 0 :(得分:0)

在为指令指定范围之前,只会调用指令的编译功能一次。 执行的函数序列如下

  1. 编译
  2. 控制器(范围用控制器实例化)
  3. 预链接功能(范围可用,但子指令(如果嵌套)尚未编译)
  4. 儿童指示的预先链接
  5. 儿童指令的帖子链接
  6. 后期链接功能(范围可用,并且也附带了儿童指令。被认为可以安全地操纵带有子项的指令元素。因为在执行那些子指令的链接功能时,不必担心通过angular覆盖子指令中的更改。)
  7. 链接函数是合适的,因为它以范围作为参数调用。

    我使用了链接功能,但它确实有效 请检查 http://jsfiddle.net/psLkyofu/2/

    var myApp = angular.module('myApp',[]);
    
    myApp.directive('disableBasedOnCondition', function() {
    return {
    restrict : 'A',
    link : function(scope,element, attr){
            var aElements = $(element).find('input');
        aElements.each(function(index, aElem) {
        console.log(aElem);
                var disabled = $(aElem).attr('id') === 'id2';
        if (disabled) {
            console.log('disabling element' + $(aElem).attr('id'))
            $(aElem).attr('ng-disabled', 'true');
        }
      })
    }
    
    
      };
    
    });
    
    function MyCtrl($scope) {
    $scope.name = 'Superhero';
    
      $scope.testValues = [
    { linkValue: 'test1', id: 'id1', label: "this is link 1"},
    { linkValue: 'test2', id: 'id2', label: "this is link 2"},
    { linkValue: 'test3', id: 'id3', label: "this is link 3"},
      ];
    
    }