这是关于风格的问题,或角度方式。
当用户注册时,我向他们发送确认电子邮件并重定向到'/'
。
此外,登录时,如果用户尚未确认其电子邮件,我会向他们提供重新发送确认电子邮件的选项。我重新发送确认电子邮件并重定向到'/'
。
在这两种情况下,我都希望在主页顶部显示信息性消息。
我找到了一种方法来做到这一点。
我创建了一些虚拟路线,其中包含blank template
和简单controller
,可在service
上设置消息并重定向到'/'
:
只是觉得有点hackish。必须指定非空template
特别难看。
我确定必须有更好的方法来执行此操作吗?对于某些人在重定向时如何将$scope
传递给控制器,或者沿着那些行传递。
以下是我的实施
虚拟路线:
app.config(function($routeProvider) {
$routeProvider
.when('/confirm', {
template: " ",
controller: function(Message, $location) {
Message.info = "We've sent you a confirmation email - please check your inbox";
$location.path('/');
}
})
.when('/reconfirm', {
template: " ",
controller: function(Message, $location) {
Message.info = "We've resent your confirmation email - please check your inbox";
$location.path('/');
}
})
消息服务:
app.factory('Message', function () {
this.message = {
info: "",
};
return this.message;
});
为了完整性,这里有消息部分和控制器
部分(使用index.html
拉入ng-include
):
<div class="container" ng-controller="MessageCtrl">
<div ng-show="message.info" class="alert alert-info">
{{ message.info }}
<button class="close pull-right" ng-click="message.info=''">×</button>
</div>
</div>
控制器:
app.controller('MessageCtrl', function($scope, Message) {
$scope.message = Message;
});
答案 0 :(得分:3)
你可以使用$ emit / $来做到这一点。
您可以使用MessageCtrl显示使用$ on
触发事件的消息$scope.$on('EventName', function(event, anyInput) {
// Do your magic
}
从发送消息的其他控制器中,您执行$ emit。如果你愿意,也可以使用$ rootScope使其成为全局。
$scope.$emit('EventName', inputToThe$on);
检查此JSFiddle:http://jsfiddle.net/4wHgh/
以下是$ emit和$ broadcast的另一个很好的解释:Working with $scope.$emit and $scope.$on
希望它是一个有用的替代方案。