我有两个视图及其resp控制器。 说 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>
在ng-click中我正在调用emit函数,我将$ emit定义为 的 firstCntrl.js
app.controller("firstCntrl", function ($scope) {
$scope.emit = function() {
$scope.$emit('send', { message: 'true' });
};
});
我想从这里发送true并在$ on中捕获它。
在 view2.html
中有两个div。说div和div二。
<div ng-show="one">Hello</div>
<div ng-show="two">World</div>
我想要的是如果用户点击第一个链接,那么它应该显示view2.html的第一个div
或者
如果用户点击第二个链接,那么它应该显示view2.html的sencod div 查看两个有自己的Secnd控制器。我很震惊。 帮助我这个如何做到这一点。感谢你在期待。
答案 0 :(得分: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;
});