【发布时间】:2014-02-26 00:22:39
【问题描述】:
我想知道如何正确使用$emit 方法,以便在我的错误回调中触发一个模态。
我有以下工厂:
angular.module('BBPlnkr').factory("Session", [
'$http', '$q', '$rootScope', function($http, $q, $rootScope) {
var service;
service = {
requestCurrentUser: function() {
if (service.isAuthenticated()) {
return $q.when(service.currentUser);
} else {
}
return $http.get('current_user').then(function(resp) {
console.log(resp.data);
service.currentUser = resp.data;
return service.currentUser;
}, function(resp) {
if (resp.status === 401) {
$rootScope.$emit("loginRequired", "err");
console.log('You are not authetnicated');
}
});
},
currentUser: null,
isAuthenticated: function() {
return !!service.currentUser;
}
};
return service;
}
]);
这个工厂所做的只是检查用户是否是 current_user,如果不是,则返回 401。我想做的是在错误回调中当调用此错误回调时触发一个模式。现在我发现我可以使用$emit 方法,但不确定我是否正确使用它。在错误回调中,我想通过作用域链向上调度事件。这就是$emit 做对的事情。但我不完全确定我是否正确设置。所以在这样做。我的控制器是这样的:
myApp.controller('MainController', ['$scope', '$rootScope', '$modal', '$location', '$route', function($scope, $rootScope, $modal, $location, $route) {
$rootScope.$on('loginRequired', function(event, second_param){
/* Do the modal stuff here??*/
});
}
]);
我知道我实际上并没有做任何事情来触发模式 ($modal.open)。但我想知道我是否朝着正确的方向前进。如果没有,一些建议会有所帮助。我在网上查找了有关$emit、$broadcast 的文档。我知道两者的区别。一次在作用域链上分派事件,一个在 $scope 链下分派事件。
【问题讨论】:
-
$rootScope 在顶部,所以要使用 $broadcast 发送。
标签: javascript angularjs