2015-01-14 2 views
0

Это одна из двух проблем. Либо это просто проблема с областью, которую я просто не вижу. Или я злоупотребляю любыми контроллерами и/или директивами.Как получить доступ к значениям уровня контроллера в директиве 'contains' в AngularJS

Предположим, у меня есть отделы, и в форме обновления отдела у меня есть компонент челнока, чтобы выбрать сотрудников в этом отделе.

У меня есть контроллер, что-то вроде:

app.controller('EmployeeChooserController', function ($scope, $http) { 
    ... 
    // These two arrays are used in a shuttle component I put into a directive 
    $scope.availablePersonnel = []; 
    $scope.selectedPersonnel = []; 
    // These are populated, as appropriate. 
    // selectedPersonnel[] contains employee objects that are associated with this department 
    // availablePersonnel[] contains everyone else 
    ... 
}); 

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

myDirectives.directive('employeeChooser', function() { 
    return { 
     restrict: 'E', 
     scope: { 
      ngModel: '=' 
     }, 
     controller: function ($scope) { 
      // I need to see availablePersonnel and selectedPersonnel here 
      // to manipulate with my shuttle code 
      // There are shuttleLeft() and shuttleRight() methods here 
     }, 
     templateUrl: '/snippets/employee-chooser.html' 
    } 
}); 

templateURL ссылаются как сотрудник-chooser.html:

<div ng-controller="EmployeeChooserController">  
    <select multiple ng-change="shuttleRight(leftSelect)" ng-model="leftSelect" ng-options='p.id as p.name for p in availablePersonnel track by p.id' > 
    </select> 
    <select ng-change="shuttleLeft(rightSelect)" ng-model="rightSelect" ng-options='p.id as p.name for p in selectedPersonnel track by p.id'> 
    </select> 
</div> 

Я хочу получить доступ к даннымПерсонал и выбранныйПерсонал в директиве, аннотированный в Комментарии. Они, конечно, доступны в $ объеме контроллера. Просто не уверен, как увидеть их в директиве, не взломав что-то уродливое вместе.

Любые советы?

Follow Up: Директива упоминается в форме, что-то вроде:

+1

Где вы указали директиву в своем шаблоне? – Angad

+0

Что делает контроллер 'CrewChooserController'? Для чего нужна изолированная область? То, что показано, не очень хорошо связано с нами, чтобы увидеть более крупный макет. – charlietfl

+0

@charlietfl Извините, что CrewChooser был опечаткой. Я пытался упростить это из гораздо большего набора кода. Я думаю, что я недостаточно разбираюсь в Angular, чтобы знать, нужен ли изолированный объем. Я, конечно, не нуждаюсь в этом для каких-либо других целей. Каким будет альтернатива? – Foswick

ответ

1

С кредита @charlietfl и @Phil, решение было простым.

Я просто изменил код директивы для:

myDirectives.directive('employeeChooser', function() { 
    return { 
     restrict: 'E', 
     require: 'ngModel', 
     link: function (scope, element, attrs, ngModel) { 
     ... 
     }, 
     templateUrl: '/snippets/employee-chooser.html' 
    } 
}); 

отлично работает и дает директивы всем необходимым.

Спасибо за советы! Я все еще пытаюсь обернуть голову вокруг того, как обрабатывается область.

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