Показать div с переносом на другой контроллер не работает

0

У меня есть кнопка в div с контроллером с именем controllerBubble. Я бы хотел, чтобы эта кнопка отображала div, управляемый другим контроллером: controllerDependance. Можно ли обернуть кнопку в div и скрытый div одним и тем же контроллером, но это не работает. Это мой HTML:

<div ng-app="app">

  <div ng-controller="mainController" ng-show="myvalue" class="ng-cloak">
    <div id="panelSap" ng-controller="controllerDependance">
      My hidden div
    </div>
  </div>

  <div id="containerDetailsTicket" class="clearfix" ng-controller="controllerBubble">
    Div which contains the button
    <div id="containerButton" ng-controller="mainController">
      <button ng-click="showAlert()">Afficher</button>
    </div>
  </div>

</div>

Это мои контроллеры:

var d3DemoApp = angular.module('app', [])
d3DemoApp.controller('controllerBubble', function() {

});

d3DemoApp.controller('controllerDependance', function($scope) {
  $scope.myvalue = false;
  $scope.showAlert = function() {
    $scope.myvalue = true;
  };
});

d3DemoApp.controller('mainController', function AppCtrl($rootScope, $scope) {
  $scope.myvalue = false;
  $scope.showAlert = function() {
    $scope.myvalue = true;
  };
});

Я создал Plunker. Любая идея, что происходит? Кто-то может работать над Plunker. Я надеюсь, что кто-то может мне помочь. Большое спасибо.

Теги:
angularjs-scope
angularjs-directive

1 ответ

2
Лучший ответ

Послушайте, не знаете, почему вы хотите иметь такое гнездование контроллеров, но я в значительной степени уверен, что это не хорошо. Я скажу вам, почему. В вашем коде вы пытаетесь использовать один и тот же контроллер на двух элементах DOM. Таким образом, у них есть 2 разных области $scope и поэтому они не работают.

Я сделал рабочий плункер для вас, используя $rootScope но это не чистый подход, так как вы будете $rootScope.myvalue глобальную переменную ($rootScope.myvalue). Объявлять глобальную переменную всегда следует избегать, если она не принудительно.

Другой предлагаемый подход в plunker заключается в использовании $emit emit как уведомления о событиях. $on будет принимать соответствующие меры при срабатывании события. Вы даже можете передавать значения, которые тоже для разных контроллеров.

Сервис также может использоваться для передачи значений между controller.

Дайте мне знать, если вам нужна дополнительная информация

Обновление 1:

Если вы хотите удалить некоторый div (не скрывать), вы должны попытаться использовать ng-if.

  • 0
    Здравствуйте, спасибо за ваш ответ, как это сделать, если я хочу удалить div при нажатии на ту же кнопку. Я создаю другое ng-шоу, но если я добавлю ng-show, div уже скрыт, можете ли вы проверить Plunker? plnkr.co/edit/YR2L2ltluvVT3yJqRxii?p=preview Большое спасибо!
  • 0
    @ afeffifari-1957: Ваш английский недостаточно понятен, чтобы я мог понять ваш подход. :( Я обновил ответ из того, что понял из вашего комментария.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню