2016-03-17 3 views
0

У меня есть директива, которая имеет модель, прошедшую по атрибуту:Угловая директива: прохождение объектов объекта

use strict;

angular.module('ebs-front') 
.directive('ebsIa', function() { 
    return{ 
     restrict: 'A'. 
     scope: { 
      opened: '=ebsIaOpened', 
      model: '=ebsIaModel', 
      cb: '&ebsIaCb' 
     }, 
     controller: function($scope, $uibModal){ 
      console.log('check'); 
      $scope.text = { text: 'test'}; 
      $scope.$watch('opened', function(newValue) { 
       if(newValue === true){ 
        var modalInstance = $uibModal.open({ 
         controller: 'ImpactAnalyseController', 
         templateUrl: 'common/directive/ebs-ia-template.html'     
        }); 
       } 
      }); 
     } 
    } 
}); 

В этой директиве мне нужно выполнить некоторые операции, а затем открыть модальное окно. Так что так хорошо, но дело в том, что я хочу, чтобы $ scope.model был доступен в ImpactAnalysisController.

Мое предположение заключалось в том, что $ scope.test и $ scope.model будут доступны в ImpactAnalysisController автоматически, но, видимо, создается изолированная область, которая действительна только для функции: function part.

Что было бы хорошим способом передать переменную модели в область действия ImpactAnalysisController ?! И почему это не поведение по умолчанию в угловом?

Если я определяю свою директиву, как показано ниже, то в директиве доступно средство removeFromFilters (в данном случае), поэтому я немного озадачен. Любая помощь будет оценена ...

use strict; 

angular.module('ebs-front') 
.directive('ebsIa', function() { 
    return{ 
     restrict: 'A'. 
     scope: { 
      opened: '=ebsIaOpened', 
      model: '=ebsIaModel', 
      cb: '&ebsIaCb' 
     }, 
     controller: 'ImpactAnalysisController' 
     };   
)}; 
+0

do add code вместо снимков экрана –

+0

Проблема, с которой вы сталкиваетесь, заключается в том, что вы не можете получить значения от атрибутов к вашему контроллеру. –

+0

Точно, я передаю ebsIaModel директиве с атрибутами. И я ожидал, что $ scope.model будет содержать этот объект внутри ImpactAnalysisController. –

ответ

0

Существует несколько способов обмена данными между контроллерами в угловом режиме. Пара, которая приходит на ум:

1- Используйте $ rootScope.broadcast ('keyName', value) и прослушайте значение с помощью $ scope.on ('keyName', function() {...} Использовать с осторожностью, не самый лучший подход в большинстве случаев

2 Храните данные не в контроллере, а в службе или фабрике, и ввести это в контроллерах (предпочтительно)

+0

Есть услуги singleton по умолчанию в угловом? –

+0

Да, услуги - это одиночные игры. –

0

что бы хороший способ передать модельную переменную области в ImpactAnalysisController ?!

Зависит от того, к чему контроллер имеет доступ и намерен сделать с ним.

И почему это не поведение по умолчанию в угловом?

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

Что может решить вашу проблему:

Если вы передаете чистую модель и ожидаем, что некоторые IO, где пользователь потенциально изменения модели я рекомендую читать и реализации: NgModelController

It позволит модели и механизмам взаимодействовать с ней, доступными для вашей директивы (-ов) с помощью инъекционного контроллера, независимо от выбранного вами типа области. Все, что вам нужно сделать, это «ngModel» в соответствии с $compile documentation.

+0

Возможно, это правда, но во втором блоке кода переменная модели директивы доступна в ImpactAnalysisController. Похоже, что из-за контроллера: function ($ scope, $ uibModal) {создается область видимости, которая является функцией valide ** внутри ** функции. Или я что-то не понимаю? –

+0

Объем, который входит в контроллер, там не создается, а вводится из контекста. Я понятия не имею, как записывается ваш файл $ uibModal, поэтому я не могу объективно прокомментировать, как заставить его делать то, что вы хотите. – tempoc

0

Фиксированный с функциональностью разрешить uibmodal в:

var modalInstance = $uibModal.open({ 
     animation: $scope.animationsEnabled, 
     templateUrl: 'myModalContent.html', 
     controller: 'ModalInstanceCtrl', 
     size: size, 
     resolve: { 
     items: function() { 
      return $scope.items; 
     } 
     } 
    }) 

товара передается от родительской области к ModalInstanceCtrl и становится доступным в контроллере в качестве переменной. Именно этого я и искал!

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