Javascript Angular1.6工厂
Hii正在使用以下代码。我正在读一个json文件名为“users.json”。如果我通过$http在controller中读取此文件,则一切正常。但我想使用从文件中读取的数据,一次又一次地在不同的控制器中使用,所以我为此制作了一个工厂。但在工厂中,当我通过Javascript Angular1.6工厂,javascript,angularjs,json,Javascript,Angularjs,Json,Hii正在使用以下代码。我正在读一个json文件名为“users.json”。如果我通过$http在controller中读取此文件,则一切正常。但我想使用从文件中读取的数据,一次又一次地在不同的控制器中使用,所以我为此制作了一个工厂。但在工厂中,当我通过$http.get()从json文件读取数据时,作为回报,当我在控制器中调用该服务方法时,它返回对象{$$state:Object} app.factory('AboutFactory',['$http',function ($http) {
$http.get()
从json文件读取数据时,作为回报,当我在控制器中调用该服务方法时,它返回对象{$$state:Object}
app.factory('AboutFactory',['$http',function ($http) {
return {
getter: function () {
return $http({
method : 'GET',
url : '/home/penguin/Modeles/users.json',
cache : true
})
.then(function (response) {
return response.data
})
}
}
}])
getter函数的结果是一个承诺。所以你应该这样使用它:
AboutFactory.getter().then(function(res)
{
console.log(res);
});
getter函数的结果是一个承诺。所以你应该这样使用它:
AboutFactory.getter().then(function(res)
{
console.log(res);
});
这是因为该服务返回一个,如中所述:
$HTTPAPI基于$q公开的延迟/承诺API
服务而对于简单的使用模式,这并不重要
高级用法熟悉这些API非常重要
以及他们提供的保证
你可以把一个承诺想象成你给某人一个绝密的信息,并亲自传递给一个朋友,然后在传递时,用你朋友的信息向你汇报
- a) 已成功交付(成功响应)或
- b) 您的朋友不在,因此无法投递信函(未成功回复)
- a) 消息已发送(请求成功),您收到了一封回信(对回复进行处理)或
- b) 无法传递消息(请求未成功),因此您可以稍后再试,或者在您没有请求的信息时执行其他操作
//app.js
(功能(){
"严格使用",;
角度模块('app',[]);
})();
//main.controller.js
(功能(){
"严格使用",;
角度。模块('app')。控制器('MainController',MainController);
主控制器.$inject=['AboutFactory'];
功能主控制器(关于工厂){
var vm=这个;
AboutFactory.getter().then(函数(数据){
//对你的数据做点什么
vm.data=数据;
},函数(错误){
//向用户提供有关错误的反馈
});
}
})();
//关于.service.js
(功能(){
"严格使用",;
角度.module('app').factory('AboutFactory','AboutFactory');
关于工厂。$inject=['$http','$q']
函数AboutFactory($http,$q){
var服务={
吸气剂:吸气剂
};
回程服务;
函数getter(){
//执行一些异步操作,在适当的时候解决或拒绝承诺。
返回$q(函数(解析、拒绝){
$http({
方法:“GET”,
网址:'https://httpbin.org/get',
缓存:真
}).然后(功能(响应){
//成功状态代码
//解析响应中的数据
返回解析(response.data);
},函数(错误){
//错误
//以某种方式处理错误
//以错误拒绝
返回拒绝(错误);
});
});
}
}
})();代码>
{{MainCtrl.data | json}
这是因为服务返回一个,如中所述:
$HTTPAPI基于$q公开的延迟/承诺API
服务而对于简单的使用模式,这并不重要
高级用法熟悉这些API非常重要
以及他们提供的保证
你可以把一个承诺想象成你给某人一个绝密的信息,并亲自传递给一个朋友,然后在传递时,用你朋友的信息向你汇报
您将消息(请求对象)提供给此人,以便他们可以尝试传递消息(发送请求)
尝试传递已发生(请求已发送),它可能:
- a) 已成功交付(成功响应)或
- b) 您的朋友不在,因此无法投递信函(未成功回复)
然后,您可以根据得到的响应采取行动
- a) 消息已发送(请求成功),您收到了一封回信(对回复进行处理)或
- b) 无法传递消息(请求未成功),因此您可以稍后再试,或者在您没有请求的信息时执行其他操作
以下是将服务与服务一起使用的示例:
//app.js
(功能(){
"严格使用",;
角度模块('app',[]);
})();
//main.controller.js
(功能(){
"严格使用",;
角度。模块('app')。控制器('MainController',MainController);
主控制器.$inject=['AboutFactory'];
功能主控制器(关于工厂){
var vm=这个;
AboutFactory.getter().then(函数(数据){
//对你的数据做点什么
vm.data=数据;
},函数(错误){
//向用户提供有关错误的反馈
});
}
})();
//关于.service.js
(功能(){
"严格使用",;
角度.module('app').factory('AboutFactory','AboutFactory');
关于工厂。$inject=['$http','$q']
函数AboutFactory($http,$q){
var服务={
吸气剂:吸气剂
};
回程服务;
函数getter(){
//执行一些异步操作,在适当的时候解决或拒绝承诺。
返回$q(函数(解析、拒绝){
$http({
方法:“GET”,
网址:'https://httpbin.org/get',
缓存:真
}).然后(功能(响应){
//成功状态代码
app.controller('myCtrl1', ['setGetData',function(setGetData) {
// To set the data from the one controller
var data = 'Hello World !!';
setGetData.setData(data);
}]);
app.controller('myCtrl2', ['setGetData',function(setGetData) {
// To get the data from the another controller
var res = setGetData.getData();
console.log(res); // Hello World !!
}]);