Angularjs指令 - 未定义隔离范围值

时间:2013-11-09 05:26:07

标签: javascript angularjs angularjs-directive angularjs-scope

我是angularjs的新手。我对指令中的孤立范围感到困惑。我有以下代码,

HTML

<!doctype html>
<html ng-app="myApp">
<body ng-controller="componentsController">
    <div class="scope-one" data-param="a">
        <div class="scope-two" data-param="c"></div>
    </div>
    <!---->
</body>
</html>

脚本

angular.module('components', [])
    .controller('componentsController', function($scope){
        $scope.a = {
                "b": 1
            };
        $scope.c = { 
                "d": 2
            };
    });

    angular.module('myApp', ['components'])
        .directive('scopeOne', function() {
            return {
                restrict: 'C',
               scope: {
                    a: "=param"
                },
                link: function(scope, element, attrs) {
                    console.log('one', scope);
                }
            };
        })
        .directive('scopeTwo', function() {
            return {
                restrict: 'C',
                scope: {
                    c: "=param"
                },
                link: function(scope, element, attrs) {
                    console.log('two', scope);
                }
            };
        })

演示 http://jsfiddle.net/jPtb3/23/

问题 我有两个指令scope-onescope-two,我在scope-two内使用scope-one。对于scope-one,隔离范围是正确的,而对于scope-two,值为undefined。我没有遇到问题,我做错了什么?当一个指令不在另一个指令中时,两个隔离的范围值都很好。

1 个答案:

答案 0 :(得分:3)

场景1 :当scope-two不在scope-one内时,两个指令都直接位于控制器的范围内,一切都按预期工作。

场景2 :当scope-two位于scope-one内时,前一指令在后者的范围内移动,而不是直接在控制器的范围内。

在这种情况下,您需要使用$parent来访问控制器范围的模型c

这对我有用:

<div class="scope-one" data-param="a">
    <div class="scope-two" data-param="$parent.c"></div>
</div>