2015-07-21 2 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), но переменная длины не оценивает. Есть ли способ сделать это в угловом?

Сообщите мне, если вам нужны какие-либо другие разъяснения!

ответ

1

Правила изоляции областей действительно просты, но трудно понять из угловых документов.

Если вы опустите свойство scope: из декларации директивы, директива будет share scope с ее родителем. Другими словами, он будет иметь прямой доступ к объему контроллера, который его назвал, и всех его переменных.

Лучшей практикой является передача необходимых переменных в область изоляции, которую вы уже используете с переменной greetings. Ваша область видимости может выглядеть так.

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

Затем написать директиву, как это:

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

И до тех пор, как $scope.message и $scope.messages определены в контроллере, вы все сделали.

Смежные вопросы