我是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中调试时,工厂不会第二次调用。
我没有从概念上得到什么,没有使用正确的方法,或者我的代码中是否有任何错误?
答案 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
正确评估了初始状态的参数,但之后没有更新。最好的方法就是我上面发布的内容。