AngularJS:将消息传递给路由

时间:2014-01-17 08:11:26

标签: javascript angularjs

这是关于风格的问题,或角度方式

当用户注册时,我向他们发送确认电子邮件重定向到'/'

此外,登录时,如果用户尚未确认其电子邮件,我会向他们提供重新发送确认电子邮件的选项。我重新发送确认电子邮件重定向到'/'

在这两种情况下,我都希望在主页顶部显示信息性消息

我找到了一种方法来做到这一点。

我创建了一些虚拟路线,其中包含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=''">&times;</button>
        </div>
    </div>

控制器

app.controller('MessageCtrl', function($scope, Message) {
    $scope.message = Message;
});

1 个答案:

答案 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

希望它是一个有用的替代方案。