Angular:动态注入我的控制器

时间:2014-05-14 15:32:41

标签: angularjs

我需要动态地向控制器注入一个额外的对象,所以我认为最好在run函数中这样做:

angular.module("app").run([
    "$rootScope", "$inject", "repository.user", function ($rootScope, userRepository) {
        $rootScope.$on("$routeChangeStart", function (event, next, current) {
            var controller = next.$$route.controller;
            userRepository.getSession(function(data) {
                // What do do now?
            });
        });
    }
]);

我想将已退回的data注入我的控制器,但我不确定该怎么做?

2 个答案:

答案 0 :(得分:0)

查看$ routeProvider文档,特别是路由的解析配置选项。您是否考虑过使用它来动态解决依赖关系?

resolve - {Object。=} - 应该注入控制器的可选依赖关系图。如果这些依赖项中的任何一个是promise,路由器将等待它们全部被解析或者在实例化控制器之前被拒绝。如果成功解决了所有promise,则会注入已解析的promise的值并触发$ routeChangeSuccess事件。如果任何promise被拒绝,则触发$ routeChangeError事件。地图对象是:

  • key - {string}:要注入控制器的依赖项名称。

  • factory - {string | function}:如果是string,那么它就是服务的别名。否则,如果是函数,则将其注入,并将返回值视为依赖项。如果结果是一个promise,则在将其值注入控制器之前解析它。请注意,ngRoute。$ routeParams仍将引用这些解析函数中的上一个路由。而是使用$ route.current.params来访问新的路由参数。

答案 1 :(得分:0)

如果我理解正确,您正尝试为每次路由更改收集用户登录状态。为什么不直接将$ rootScope中的数据保存为$ rootScope.currentUser = data。

这样您就可以从任何控制器访问$ rootScope.currentUser。