1.目的:期望該遠端資料(json.json)需要重複利用,希望只請求一次json.json數據,可以在多個控制器中反覆使用
2.問題:路由每跳轉一次,就會重新請求一次'json.json'
3.程式碼如下
angular.module("myApp",[])
.factory("$remoteData",['$http',function($http){
return $http.get("../json/json.json").then(function(response){
//获取 远程数据 服务
//目的:期望该远程数据(json.json)需要重复利用,希望只请求一次json.json数据,可以在多个控制器中反复使用
//问题:路由每跳转一次,就会重新请求一次'json.json'
console.log(response.data);
var myData = "";
return myData = response.data;
})
}])
.factory("$localData",function(){
return {"name":"wenwu","age":"26"};
})
.controller("FirstController",function($scope,$remoteData,$localData){
//远程请求的数据 --获取失败(如果这里能够获取json.json的数据,应该就成功了)
$scope.remoteData = $remoteData;
console.log('$scope.remoteData',$scope.remoteData);//返回 $scope.remoteData d {$$state: Object}
console.log('$scope.remoteData.$$state.value',$scope.remoteData.$$state.value);//返回undefined
//本地制作的数据 -- 获取成功
$scope.localData = $localData;
console.log($scope.localData);//返回 Object {name: "wenwu", age: "26"}
})
过去多啦不再A梦2017-05-15 17:08:02
可以試試看這樣:
factory("$remoteData",['$http', '$q', function($http, $q){
var self = this;
function getData() {
if (self.myData) {
return $q(function(resolve, reject) {
resolve(self.myData);
});
} else {
return $http.get("../json/json.json").then(function(response){
self.myData = response.data;
return self.myData;
});
}
}
return {getData: getData}
}]);
再controller中這麼用:
.controller("FirstController",function($scope,$remoteData,$localData){
$remoteData.getData().then(function(myData) {
//use myData
});
});