2017-01-14 2 views
0

У меня есть два вида и его контроллер. Скажите view1.html и его контроллер firstCntrl и view2.html и его контроллер secndCntrl.

В view1.html:

Существует Link2, который будет перенаправлен на view2.html, если она нажата.

<a href="#/view1" ng-click="emit()">Link1</a> 
<a href="#/view2" ng-click="emit()">Link2</a> 

в нг щелкните Я зову испускать функцию, где я определил $ испускают в firstCntrl.js

app.controller("firstCntrl", function ($scope) { 
    $scope.emit = function() { 
     $scope.$emit('send', { message: 'true' }); 
    }; 
}); 

Я хочу отправить верно отсюда и поймать его в $ на.

В view2.html

Есть два дел. скажем, div one и div two.

<div ng-show="one">Hello</div> 
<div ng-show="two">World</div> 

Что я хочу, чтобы если пользователь нажмет на первой ссылке, то он должен показать первый DIV из view2.html

Или

, если пользователь щелкает по второй ссылке, то он должен показать sencod DIV из view2.html View two имеют свой собственный контроллер Secnd. Меня поразили. Помогите мне в этом Как это сделать. Благодарим вас заранее.

ответ

0

Я думаю, вам не нужно испускать здесь, так как firstCtrl и secondCtrl - выделенный контроллер. Если между вашими областями нет отношения родитель-ребенок, вы можете ввести $ rootScope в контроллер и передать событие всем дочерним областям.

View1.html

<a href="#/view1" ng-click="broadcastMsg(1)">Link1</a> 
<a href="#/view2" ng-click="broadcastMsg(2)">Link2</a> 

firstCtrl

app.controller("firstCntrl", function ($scope, $rootScope) { 
    $scope.broadcastMsg = function(id) { 
     if (id == 1) 
      $rootScope.$broadcast('send', 'One'); 
     else 
      $rootScope.$broadcast('send', 'Two'); 
    }; 
}); 

View2.html

<div ng-show="showOne">Hello</div> 
<div ng-show="!showOne">World</div> 

parentCntrl

Используйте $ scope.on вместо $ rootScope.on, чтобы предотвратить утечку памяти.

app.controller("parentCntrl", function ($scope, $rootScope) { 
     $scope.$on('send', function (evt, message) { 
      if (message == 'One') 
       $scope.showOne = true; 
      else 
       $scope.showOne = false; 
     }); 
}); 

secondCtrl

app.controller("secondCntrl", function ($scope) { 
     $scope.showOne = $scope.$parent.showOne; 
}); 
+0

одна вещь, которую я заметил, что если я clikcking на msg1 или сообщ 2, но он показывает только мир. no Hello – Mohammed

+0

Я сталкиваюсь с одной ошибкой, что $ broadcast не работает на один клик. Я должен нажать два раза за это[email protected] – Mohammed

+0

Это не ошибка, я думаю. Это задержка исполнения. Вы можете отлаживать код, помещая console.log ('enter') в kernelcope.on. Что вы получите после нажатия в первый раз? – digit