AngularJS -当URL改变时不调用工厂

AngularJS - factory not being called when URL changes

本文关键字:调用 工厂 改变 URL AngularJS      更新时间:2023-09-26

我是Angular JS的新手,当我的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。当我在chrome中调试时,工厂不会被第二次调用。

我在概念上没有得到一些东西,没有使用正确的方法,或者在我的代码中有任何错误?

你在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正确地计算初始状态的参数,但之后不更新。最好的方法就是我上面发布的。