为什么 rootscope.on 没有被触发?
Why is rootscope.on not triggered?
我在 ListController 中使用 $scope.$emit 来触发 MainController 中的 $rootScope.$on 事件(angular 1.3):
(function () {
'use strict';
angular
.module('mymodule.faultlist')
.controller('MainController', ['$rootScope', function ($rootScope) {
$rootScope.$on('newViewLoaded', function (event, metadata) {
$rootScope.metadata = metadata;
console.log('hello metacontroller metadata', metadata);
});
}])
.controller('ListController', ['faultlistservice', 'faultListConstants', '$scope', '$timeout', '$rootScope',
function (faultlistservice, faultListConstants, $scope, $timeout, $rootScope) {
$timeout(function () {
$scope.$emit('newViewLoaded', {
'title': faultListConstants.meta.title,
'description': faultListConstants.meta.description
});
}, 100);
}]);
})();
这就是 index.html 的大致样子:
.
.
<head ng-controller="MainController">
<div class="container main-content" ui-view >
</div>
..
这不会被触发。我尝试将 $rootScope.$on 块移动到 ListController,然后 $rootScope.$on 被触发。为什么这不适用于 MainController 或者是否有更好的实现方法?
你的代码有效http://plnkr.co/edit/hsl3l6rTJd1SUDgaijCy?p=preview
我认为你的问题可能在于你的 ng-app 不在 html 标签上,所以 <head ng-controller="MainController">
这一行在 ngApp 之外。
您的代码可以正常工作http://plnkr.co/edit/nX9KVqY0SZ46Yvf92VAk?p=preview
plunkr 展示了如何使用此示例来处理您的原始代码。这里的标题和描述是要在 emit 函数内部传递的参数,不能是字符串文字
$scope.$emit('newViewLoaded', {
'title': faultListConstants.meta.title,
'description': faultListConstants.meta.description
})
我在 ListController 中使用 $scope.$emit 来触发 MainController 中的 $rootScope.$on 事件(angular 1.3):
(function () {
'use strict';
angular
.module('mymodule.faultlist')
.controller('MainController', ['$rootScope', function ($rootScope) {
$rootScope.$on('newViewLoaded', function (event, metadata) {
$rootScope.metadata = metadata;
console.log('hello metacontroller metadata', metadata);
});
}])
.controller('ListController', ['faultlistservice', 'faultListConstants', '$scope', '$timeout', '$rootScope',
function (faultlistservice, faultListConstants, $scope, $timeout, $rootScope) {
$timeout(function () {
$scope.$emit('newViewLoaded', {
'title': faultListConstants.meta.title,
'description': faultListConstants.meta.description
});
}, 100);
}]);
})();
这就是 index.html 的大致样子:
.
.
<head ng-controller="MainController">
<div class="container main-content" ui-view >
</div>
..
这不会被触发。我尝试将 $rootScope.$on 块移动到 ListController,然后 $rootScope.$on 被触发。为什么这不适用于 MainController 或者是否有更好的实现方法?
你的代码有效http://plnkr.co/edit/hsl3l6rTJd1SUDgaijCy?p=preview
我认为你的问题可能在于你的 ng-app 不在 html 标签上,所以 <head ng-controller="MainController">
这一行在 ngApp 之外。
您的代码可以正常工作http://plnkr.co/edit/nX9KVqY0SZ46Yvf92VAk?p=preview
plunkr 展示了如何使用此示例来处理您的原始代码。这里的标题和描述是要在 emit 函数内部传递的参数,不能是字符串文字
$scope.$emit('newViewLoaded', {
'title': faultListConstants.meta.title,
'description': faultListConstants.meta.description
})