2015-07-21 44 views
0

我在我的主控制器中有一個範圍,然後在隔離範圍內輸入我的鏈接函數。有沒有辦法從我的鏈接功能訪問主範圍?這裏是什麼,我試圖做一個簡化的版本:在Angular中的鏈接函數中訪問範圍

角:

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

關於隔離範圍的規則非常簡單,但很難從Angular文檔中理解。

如果您從指令聲明中省略scope:屬性,指令將與其父項共享範圍。換句話說,它可以直接訪問調用它的控制器的範圍及其所有變量。

一個更好的做法是將必要的變量傳遞到隔離範圍,您已經在使用greetings變量進行操作。你的範圍可能看起來像這樣。

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

然後寫指令是這樣的:

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

而且只要$scope.message$scope.messages在控制器中定義,你所有的設置。

相關問題