2014-08-06 2 views
1

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

В моем приложении конфиге у меня есть:

.state('app.sessionActivity', { 
      url: "/session/:sessionid/activity/:id", 
      views: { 
       'menuContent' :{ 
        templateUrl: "templates/activity.html", 
        controller: 'SessionActivityCtrl' 
       } 
      } 
     }) 

Мой контроллер:

.controller('SessionActivityCtrl', ['$scope', '$stateParams', 'localJSONData', function($scope, $stateParams, localJSONData) { 

var activityID = $stateParams.id; 
var activityVideoURLSRC = null; 

localJSONData.getJSONData() 
    .success(function(data){ 
     $scope.activityData = data[activityID - 1]; 
    }); 

}]) 

Моя фабрика:

.factory('localJSONData', ['$http', '$stateParams', function($http, $stateParams){ 
var sessionID = $stateParams.sessionid; 

return { 
    getJSONData: function(){ 
     if(sessionID == 1){ 
      return $http.get('json/session1_activities.json', {cache:false}); 
     } 
     if(sessionID == 2){ 
      return $http.get('json/session2_activities.json', {cache:false}); 
     } 
} 
} 
}]) 

Это все работает, когда я сначала загрузить страницу и перейти к URL (например)/session/1/activity/1 в первый раз. Но затем, когда я загружаю URL (например)/session/2/activity/2, данные взяты из сеанса 1. Когда я отлаживаю хром, фабрика не получает вызов во второй раз.

Я не получаю что-то концептуально, не используя правильные методы, или есть ошибки в моем коде?

ответ

1

Способ, которым вы проходите в sessionID, на самом деле не очень хорошая идея, почему бы вам не передать его методу на вашей фабрике?

return { 
    getJSONData: function(sessionID){ 
     if(sessionID == 1){ 
      return $http.get('json/session1_activities.json', {cache:false}); 
     } 
     if(sessionID == 2){ 
      return $http.get('json/session2_activities.json', {cache:false}); 
     } 
} 

Контроллер:

localJSONData.getJSONData($stateParams.id) 
    .success(function(data){ 
     $scope.activityData = data[activityID - 1]; 
    }); 

причина, почему это первый раз, когда ваши приложения нагрузок, потому что $stateParams правильно оценивает параметр начального состояния, но не обновляется после этого. Лучший способ сделать это - это то, что я написал выше.

+0

Отлично, это работает. Спасибо! – aritchie

Смежные вопросы