Ale*_*Rus 8 javascript angularjs
我有2条路由共享一个控制器,一个需要在视图加载之前解析数据,另一个不需要解析数据.
路由段示例:
...
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'
})
...
Run Code Online (Sandbox Code Playgroud)
控制器示例:
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);
}]);
Run Code Online (Sandbox Code Playgroud)
有没有办法resolvedData在没有明确使用解析名称作为依赖项的情况下获取控制器?那么可以进行检查吗?
使用$ injector不起作用.我想做类似的事情:
if ($injector.has('resolveData')) {
var resolveData = $injector.get('resolveData');
}
Run Code Online (Sandbox Code Playgroud)
但是,即使对于具有resolveDataset('/ users')的路由,这也不起作用:
app.controller('UsersCtrl', ['$scope', 'Helper', '$injector',
function($scope, Helper, $injector) {
// this does not work -> fails with the unknown "resolvedDataProvider" as well
$injector.get('resolvedData');
}]);
Run Code Online (Sandbox Code Playgroud)
这可以在angularjs中完成吗?或者我应该创建一个新的控制器?
谢谢.
看起来我想出了另一种方法.已解决的数据是其中的一部分$route.所以你可以使用以下方法访问它
app.controller('UsersCtrl', ['$scope', '$route', 'Helper',
function($scope, $route, Helper) {
if ($route.current.locals.resolvedData) {
var resolvedData = $route.current.locals.resolvedData;
}
}]);
Run Code Online (Sandbox Code Playgroud)
如果其他路由不需要它,只需在该路由上注入undefined:
路由器:
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;
}
}
})
Run Code Online (Sandbox Code Playgroud)
控制器:
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
}
}]);
Run Code Online (Sandbox Code Playgroud)