在Angular中访问链接函数中的范围

时间:2015-07-21 15:49:58

标签: angularjs

我的主控制器中有一个范围,然后我将一个隔离范围输入到我的链接功能中。有没有办法从我的链接功能访问主范围?这是我正在尝试做的简化版本:

角:

angular.module('root', [])
  .controller('index', ['$scope', function($scope){
    $scope.messages = ["Hello", "Howdy", "What's up"]
  }

  .directive('myDirective', function() {
     return {
       restrict: 'E',
       scope: { greeting: '=' },
       link: function(scope, element, attrs) {
            var greeting = scope.greeting;  //one message from the array, fed in by <my-directive greeting='message'> from index.html
            var length = scope.messages.length; //length of whole messages array

            //do stuff
        }
      }
    }

HTML:(index.html)

   <body ng-app='root' ng-controller='index'>
    <div ng-repeat='message in messages'>
      <my-directive greeting='message'></my-directive> 
    </div>
</body> 

我希望能够从我的链接功能访问有关整个消息数组的消息和“元”信息。但是,现在我只能访问消息(var greeting),但长度变量不会评估。 有没有办法以角度来做这个?

如果您需要任何其他说明,请与我们联系!

1 个答案:

答案 0 :(得分:1)

关于隔离范围的规则非常简单,但很难从Angular文档中理解。

如果省略指令声明中的scope:属性,该指令将与其父级共享范围。换句话说,它可以直接访问调用它的控制器的范围及其所有变量。

更好的做法是将必要的变量传递到隔离范围,您已经使用greetings变量进行隔离范围。您的范围可能如下所示。

scope: {
  greeting: '=',
  messages: '='
}

然后写下这样的指令:

<my-directive greeting='message' messages='messages'></my-directive>

只要您的控制器中定义了$scope.message$scope.messages,您就可以全部设置。