AngularJS - URL更改时未调用工厂

时间:2014-08-06 11:08:13

标签: javascript angularjs

我是Angular JS的新手,当我的网址发生变化时,我很难让工厂返回数据。

在我的应用配置中,我有:

.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.当我在chrome中调试时,工厂不会第二次调用。

我没有从概念上得到什么,没有使用正确的方法,或者我的代码中是否有任何错误?

1 个答案:

答案 0 :(得分: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正确评估了初始状态的参数,但之后没有更新。最好的方法就是我上面发布的内容。