2015-10-01 2 views
0

У меня есть ng-repeat, создающий несколько директив, каждый с изолированной областью. Я хочу иметь возможность вызывать одну функцию, которая вызывает функцию для каждой директивы, поэтому она сбрасывает переменную в каждой изолированной области. Я все равно не могу это сделать? Я понимаю, что это может быть не самая лучшая практика, но мне просто нужно решение на данный момент.Обновленная изолированная область действия по нескольким директивам

+0

разместить свой код и показать нам, что все, что вы пробовали. –

ответ

0

Способ сделать это, чтобы обеспечить обратную связь с директивой (то есть scope: { xxx: '&' }), которая будет выполнять некоторые функции. Может быть:

<the-directive callback="ctrl.command(action, argument)" /> 

И директива выглядит следующим образом:

app.directive('theDirective', function() { 
    return { 
     ... 
     scope: { 
      callback: '&', 
      ... 
     }, 
     controller: ['$scope', function($scope) { 
      this.resetTheVariable = function() { 
       // DO WHAT YOU WANT HERE 
      }; 

      $scope.callback({ action: 'register', argument: this }); 

      $scope.$on('$destroy', function() { 
       scope.callback({ action: 'deregister', argument: this }); 
      }); 
     }] 
    }; 
}) 

Теперь контроллер вызова этой директивы будет выглядеть так:

function TheController() { 
    var registeredDirectives = []; 

    this.command = function(action, argument) { 
     switch(action) { 
      case 'register': 
       registeredDirectives.push(argument); 
       break; 
      case 'deregister': 
       var index = registeredDirectives.indexOf(argument); 
       if(index >= 0) { 
        registeredDirectives.splice(index, 1); 
       } 
       break; 
     } 
    }; 

    this.resetAll = function() { 
     registeredDirectives.forEach(function(registeredDirectiveController) { 
      registeredDirectiveController.resetTheVariable(); 
     }); 
    }; 
} 
1

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

Я создаю панель виджетов. Мой виджет - это директива, содержащаяся в файле ng-repeat.

Я испускаю события в своем контроллере $scope.$broadcast, а затем послушайте мою директиву с $scope.$on. Я использую $indexng-repeat, чтобы иметь возможность настраивать конкретные виджеты.

быстрый пример скрипку: http://jsfiddle.net/adyjm9g4/

EDIT: Забыл упомянуть, где вы также можете передать данные: http://jsfiddle.net/adyjm9g4/1/

+0

приятное элегантное решение, спасибо! :) – colouredFunk

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