如何避免使用ui-router"污染"解决方法

Tho*_*mas 5 angularjs angular-ui-router

我想尽可能地限制我的AngularJS应用程序中的"闪烁".我使用resolve:从路由器(与ngRouterui-router一起工作)加载数据,以便在更改路由之前显示我的页面所需的一切.

常见例子:

.state('recipes.category', {
    url: '/:cat',
    templateUrl: '/partials/recipes.category.html',
    controller: 'RecipesCategoryCtrl as recipeList',
    resolve: {
         category: ['$http','$stateParams', function ($http, $stateParams) {
             return $http.get('/recipes/' + $stateParams.cat).then(function(data) { return data.data; });
         }]
     }
});
Run Code Online (Sandbox Code Playgroud)

现在我的RecipesCategoryCtrl控制器可以加载类别,承诺将直接解决.

有没有办法将加载代码直接嵌入我的控制器中?或者其他地方更"干净"?我不喜欢在路线定义中有太多逻辑......

就像是:

.state('recipes.category', {
    url: '/:cat',
    templateUrl: '/partials/recipes.category.html',
    controller: 'RecipesCategoryCtrl as recipeList',
    resolve: 'recipeList.resolve()' // something related to RecipesCategoryCtrl and "idiomatic" AngularJS
});
Run Code Online (Sandbox Code Playgroud)

phi*_*ppd 2

您可以在控制器中注入一个服务,该服务执行 $http.get 来清理您的代码。

.state('recipes.category', {
  url: '/:cat',
  templateUrl: '/partials/recipes.category.html',
  controller: 'RecipesCategoryCtrl as recipeList',
  resolve: {
       category: ['recipeService','$stateParams', function (recipeService, $stateParams) {
           return recipeService.get($stateParams.cat)
       }]
  }
});
Run Code Online (Sandbox Code Playgroud)

  • 不,这似乎在 ui-router 中不可能,在 ngRouter 中也不可能。AngularJS 团队意识到这感觉“错位”,正如您在有关 AngularJS 2.0 中的路由的文档中当前路由实现的弱点部分中看到的那样:https://t.co/d6qhdGM2VY 所以在我看来,移动服务逻辑是你现在能做的最好的事情...... (2认同)