Angularjs获取scope属性而不使用custom指令中的隔离作用域

时间:2014-12-30 11:08:02

标签: javascript angularjs

所以我根据我的项目进行了一些实验

我创建了2个指令,一个使用隔离范围而另一个不是..

问题是:

  1. 有没有办法在不使用隔离范围的情况下获取范围属性? 因为在我的项目中,我没有一个孤立的自定义范围 指令环境,我还需要访问父范围

  2. 我可以使用angular.element操作dom('#' + scope.id)? 如果没有办法做到这一点?

  3. 这是unisolated自定义指令

    <test-directive item="item" content="item.context"></test-directive>
    

    这是js代码

    app.directive('testDirective', function() {
      return {
        restrict: "EA",
        scope: false,
        template:"<div>test directive</div>",
        link: function(scope, elm, attr) {
          console.log(attr.item); //I want it like the result gives in line 39
          console.log(attr.id); //I want it like the result gives in line 41
          console.log(attr.content); //I want it like the result gives in line 43
          console.log(scope.name);
        }
      }
    });
    

    这是孤立的

    <isolated-directive id=item.id item="item" content="item.context"></isolated-directive>
    

    这是js代码

    app.directive('isolatedDirective', function() {
      return {
        restrict: "EA",
        scope:{
          item:'=item',
          id:'=id',
          content:'=content',
        },
        template:"<div>isolated directive</div>",
        link:function(scope,elm,attr) {
          console.log(scope.item.id);
          console.log(scope.id);
          console.log(scope.content);
          console.log(scope.name); //I want it like the result gives in line 27
        }
      }
    });
    

    这是有效的plunkr

    有谁愿意帮忙?

2 个答案:

答案 0 :(得分:0)

您可以使用scope: true,范围将从其插入的位置原型继承。但是,如果您只需要访问父作用域,则始终可以使用$parent,即使在隔离范围内也是如此。不推荐,但有可能。

答案 1 :(得分:0)

Q1:

app.directive('testDirective', function() {
    return {
        restrict: "EA",
        scope: false,
        template:"<div>test directive</div>",
        link: function(scope, elm, attr) {
            console.log(scope[attr.item]); //I want it like the result gives in line 39
            console.log(scope[attr.id]); //I want it like the result gives in line 41
            console.log(scope[attr.content]); //I want it like the result gives in line 43
            console.log(scope.name);
        }
    }
});

Q2:

链接函数中的parm elm基本上是与指令相关的DOM。如果您真的想要DOM属性中的scope.item.id,请使用ng-attr来定义您的属性,如下所示。请注意,angular.element仅用于将DOM包装到JQuery元素,但不用于DOM查找。

<isolated-directive ng-attr-id="{{item.id}}" item="item" content="item.context"></isolated-directive>