使用ui.route

时间:2016-04-15 22:12:03

标签: angularjs angular-ui-router angular-http

我正在$http调用角度ajaxui.router使用routing

路线

.state("/dashboard.inactive", {
  url: "/inactive",
  templateUrl: "angular/templates/dashboard/inactive.html",
  controller: "dashboardCtrl"
})
.state("/dashboard.drafts", {
  url: "/drafts",
  templateUrl: "angular/templates/dashboard/drafts.html",
  controller: "dashboardCtrl"
});

因此,如果是针对单个网址,则以下代码可以使用。

控制器

app.controller('dashboardCtrl', function ($scope, DashboardFactory){
    DashboardFactory.listings(function(DashboardFactory) {
        $scope.results = DashboardFactory;
    });
});

以下工厂仅从drafts.json资源获取。因此,当网址更改为无效时,我希望它分别从inactive.jsonactive.json获取。

工厂

app.factory('DashboardFactory', function($http){
    return {
        listings: function(callback){
            $http.get('drafts.json').success(callback);
        }
    };

});

简而言之,我需要根据网址

向以下3个网址中的任何一个发送请求
1) '/drafts.json'
2) '/inactive.json'
3) '/active.json'

我可以为每个活动,非活动和草稿创建不同的控制器,并按预期方式进行提取。但有没有更好的方法呢?

1 个答案:

答案 0 :(得分:2)

您可以使用ui路线的$state服务来判断您所在的州。 只需将$ state注入您的服务,然后使用$state.current以访问当前状态配置。

app.factory('DashboardFactory',
     function($http, $state){ 
       return { 
          listings: function(callback){ 
              var currentView = $state.current.url.replace('/', '');
              $http.get(currentView + '.json').success(callback); 
          } 
       }; 
    });

更好的解决方案是使用params配置的state属性或添加一些自定义属性,如:

.state("/dashboard.inactive", {
  url: "/inactive",
  templateUrl: "angular/templates/dashboard/inactive.html",
  controller: "dashboardCtrl",
  params: {
    json: 'inactive.json'
  }
})
.state("/dashboard.drafts", {
  url: "/drafts",
  templateUrl: "angular/templates/dashboard/drafts.html",
  controller: "dashboardCtrl",
  params: {
    json: 'drafts.json'
  }
});

documentation中描述了它。