Javascript 如何在控制器内手动注入路由解析数据?

Javascript 如何在控制器内手动注入路由解析数据?,javascript,angularjs,Javascript,Angularjs,我有两个共享控制器的路由,一个需要在加载视图之前解析数据,另一个不需要解析数据 路由段示例: ... when('/users', { controller: 'UsersCtrl', templateUrl: '/partials/users/view.html', resolve: { resolvedData : ['Accounts', function(Accounts) { return Accounts.get();

我有两个共享控制器的路由,一个需要在加载视图之前解析数据,另一个不需要解析数据

路由段示例:

...
when('/users', {
    controller: 'UsersCtrl',
    templateUrl: '/partials/users/view.html',
    resolve: {
        resolvedData : ['Accounts', function(Accounts) {
            return Accounts.get();
        }]
    }
}).
when('/users/add', {
    controller: 'UsersCtrl',
    templateUrl: '/partials/users/add.html'
})
...
控制器示例:

app.controller('UsersCtrl', ['$scope', 'Helper', 'resolvedData', 
    function($scope, Helper, resolvedData) {
        // this works for the first route, but fails for the second route with
        // unknown "resolvedDataProvider"
        console.log(resolvedData); 
}]);
是否有任何方法可以在控制器中获取
resolvedData
,而无需显式使用resolve名称作为依赖项?那么可以进行检查吗

使用$injector不起作用。我想做一些类似的事情:

if ($injector.has('resolveData')) { 
     var resolveData = $injector.get('resolveData');
}
但是,即使对于设置了
resolveData
的路由(“/users”),这也不起作用:

这可以用angularjs完成吗?还是我应该创建一个新的控制器


谢谢。

如果另一条路线不需要它,只需在该路线上注入未定义:

路由器:

when('/users', {
    controller: 'UsersCtrl',
    templateUrl: '/partials/users/view.html',
    resolve: {
        resolvedData : ['Accounts', function(Accounts) {
            return Accounts.get();
        }]
    }
}).
when('/users/add', {
    controller: 'UsersCtrl',
    templateUrl: '/partials/users/add.html',
    resolve: {
       resolvedData: function() {
          return undefined;
       }
    }
})
控制器:

app.controller('UsersCtrl', ['$scope', 'Helper', 'resolvedData', 
    function($scope, Helper, resolvedData) {
        if(resolvedData){
          //set some scope stuff for it
        } else {
         //do what you do when there is no resolvedData
        }
}]);

看来我找到了另一条路。解析的数据是
$route
的一部分。因此,您可以使用以下方式访问它:

app.controller('UsersCtrl', ['$scope', '$route', 'Helper', 
    function($scope, $route, Helper) {

        if ($route.current.locals.resolvedData) {
            var resolvedData = $route.current.locals.resolvedData;
        }
}]);

这个解决方案怎么比我的好?除了在路由服务中使用掩埋对象来完成它之外,您实际上正在做完全相同的事情。我的解决方案考虑到路由器的一致性,并且控制器仍然能够处理这种情况。@第四,我不认为添加一个未使用的解析返回未定义的路由是一个更好的选择,让我们说我的解决方案更适合我的需要。。。我确实对你的答案投了赞成票,但我不认为你对我的反对票是合理的。你没有按照他们的意图使用angular的特性。虽然您确实找到了一个“有效”的答案,但它并没有按照预期的方式使用这些功能。路由解析是将组件注入控制器的方法。如果解析对该路径没有意义,那么这些组件可以合法地不定义。我否决了你的意见,不鼓励其他人使用这个解决方案,这是有道理的。@4-我们只能同意不同意。$route的locals属性列在文档中,它清楚地表明它包含该路由的解析数据,因此它不仅仅是我发现的和“有效”的东西。因为我觉得这种方法更干净。我不会添加什么都不做的代码,因为我可以访问我的数据而不必这样做。
app.controller('UsersCtrl', ['$scope', '$route', 'Helper', 
    function($scope, $route, Helper) {

        if ($route.current.locals.resolvedData) {
            var resolvedData = $route.current.locals.resolvedData;
        }
}]);