如何在保持对父作用域的访问的同时访问自定义指令中的元素属性?

时间:2014-10-05 02:17:05

标签: javascript angularjs angular-directive

基本上我希望能够访问我创建的指令的父作用域,但我也希望能够访问我放置在元素上的属性。

例如相关的js

app.directive('testDirective', function(){
    return {
        restrict:"E",
        templateUrl:"directive.html",
        scope:{
            testAttribute: '='
        }
    };
});

app.controller('mainCtrl', function($scope){
     $scope.name = 'henry'
}

的index.html

<div ng-controller="mainCtrl">
    <test-directive test-attribute="Hello"></test-directive>
</div>

directive.html

{{testAttribute}}
{{name}}

输出是&#34;你好&#34;而不是&#34; Hello Henry&#34;

所以只是为了澄清,我希望能够做的就是访问属性和父范围。

1 个答案:

答案 0 :(得分:1)

对于您要做的事情,不需要双向绑定。您正在尝试访问分配为属性的文本。你可以把你的指令写成: -

.directive('testDirective', function(){
    return {
        restrict:"E",
        //scope:true,   //apply if required
        templateUrl:"directive.html",
        link:function(scope, elm, attrs){
           scope.testAttribute = attrs.testAttribute; //Get it from attributes
        }
    };
});

<强> Demo

现在,指令设置的scope属性将使用父作用域本身。但您可能希望使用scope:true(父级的子范围)或2 way binding智能孤立范围的理想方案。但是在这一点上,由于不确定你的最初目标是什么,这是一个基于你的问题所依据的解决方案。

总结一下: -

  

我希望能够访问我创建的指令的父范围

删除隔离范围,只使用父范围。

  

但我也希望能够访问我放置在元素上的属性。

使用链接函数attrs的{​​{1}}参数。如果要将其评估为绑定值,请执行do(attrs.testAttribute