Изменение URL-адреса запроса на основе URL-адреса при использовании ui.route

Я использую $http в угловой для ajax звонки и использование ui.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"
});

Поэтому приведенный ниже код работает, если он предназначен для одного URL.

контроллер

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

Внизу фабрика выбирается только из drafts.json ресурс. Поэтому, когда URL-адрес меняется на неактивный, я хочу, чтобы он извлекался из inactive.json а также active.json соответственно.

завод

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

});

Короче говоря, мне нужно отправлять запросы на любой из трех указанных ниже URL-адресов на основе URL-адреса.

1) '/drafts.json'
2) '/inactive.json'
3) '/active.json'

Я могу создать разные контроллеры для каждого активного, неактивного и черновика и сделать так, чтобы он получался как положено. Но есть ли лучший способ сделать это?

1 ответ

Решение

Вы можете использовать службу $state UI route, чтобы определить, в каком состоянии вы находитесь. Просто введите $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'
  }
});

Это описано в документации.

Другие вопросы по тегам