使 angular 服务更加模块化
making angular Service more modular
我正在使用 John Papa 风格指南。 https://github.com/johnpapa/angular-styleguide#style-y061。我喜欢这种样式,它似乎确实使我的代码更易于阅读。但是,我按照 单独的数据调用 .
在此 John Papa 中,将 return 对象置于服务的顶部。函数内部语句在底部创建,并在调用函数时提升到顶部。
getCustomerListComplete 函数正在按预期方式提取 Json 文件。我确保 return response.data.
问题是 return 语句似乎没有将数据发送到控制器。
return {
getCustomers: getCustomers
}
服务开始 ******
(function() {
angular
.module('app.services',[])
.factory('customersFactory', customersFactory);
function customersFactory($http, $log) {
return {
getCustomers: getCustomers
};
function getCustomers(){
$http.get('./Services/customers.json')
.then(getCustomerListComplete)
.catch(getCustomerListFailed);
function getCustomerListComplete(response) {
console.log('response.data',response.data);
return response.data;
}
function getCustomerListFailed(error) {
console.log('error', error);
}
}
}
}());
在我的控制器内部,我收到关于承诺的错误(然后)。注意它不能读取 undefined.
Cannot read property 'then' of undefined
这是我的控制器。我相信我正在正确设置和使用它。 正在注入 customersFactory。 正在调用活动函数。不确定可能是什么问题。
(function() {
'use strict';
angular
.module('app.customers')
.controller('CustomerController', CustomerController);
function CustomerController($stateParams, customersFactory) {
var vm = this;
vm.customers = [];
vm.orders = null;
// table sorting
vm.sortBy = 'name';
vm.reverse = false;
vm.doSort = doSort;
activate()
function activate() {
return getCustomersList().then(function() {
console.log('activated')
});
}
function getCustomersList() {
return customersFactory.getCustomers()
.then(function(data) {
vm.customers = data;
return vm.customers;
});
}
function doSort(propName) {
vm.sortBy=propName;
vm.reverse=!vm.reverse
}
}
})();
你需要 return $http.get
里面 getCustomers
:
return $http.get('./Services/customers.json')
我也遵循 John Papa 的风格指南,但我从未见过他这样做,因为一切都应该在函数闭包内,即:
(function () {
....
})();
但是是的,就像韦恩说的那样
return $http.get(...)
顺便说一句,如果他确实谈到要在关闭外返回,请尝试告诉我在哪里。
我正在使用 John Papa 风格指南。 https://github.com/johnpapa/angular-styleguide#style-y061。我喜欢这种样式,它似乎确实使我的代码更易于阅读。但是,我按照 单独的数据调用 .
在此 John Papa 中,将 return 对象置于服务的顶部。函数内部语句在底部创建,并在调用函数时提升到顶部。
getCustomerListComplete 函数正在按预期方式提取 Json 文件。我确保 return response.data.
问题是 return 语句似乎没有将数据发送到控制器。
return {
getCustomers: getCustomers
}
服务开始 ******
(function() {
angular
.module('app.services',[])
.factory('customersFactory', customersFactory);
function customersFactory($http, $log) {
return {
getCustomers: getCustomers
};
function getCustomers(){
$http.get('./Services/customers.json')
.then(getCustomerListComplete)
.catch(getCustomerListFailed);
function getCustomerListComplete(response) {
console.log('response.data',response.data);
return response.data;
}
function getCustomerListFailed(error) {
console.log('error', error);
}
}
}
}());
在我的控制器内部,我收到关于承诺的错误(然后)。注意它不能读取 undefined.
Cannot read property 'then' of undefined
这是我的控制器。我相信我正在正确设置和使用它。 正在注入 customersFactory。 正在调用活动函数。不确定可能是什么问题。
(function() {
'use strict';
angular
.module('app.customers')
.controller('CustomerController', CustomerController);
function CustomerController($stateParams, customersFactory) {
var vm = this;
vm.customers = [];
vm.orders = null;
// table sorting
vm.sortBy = 'name';
vm.reverse = false;
vm.doSort = doSort;
activate()
function activate() {
return getCustomersList().then(function() {
console.log('activated')
});
}
function getCustomersList() {
return customersFactory.getCustomers()
.then(function(data) {
vm.customers = data;
return vm.customers;
});
}
function doSort(propName) {
vm.sortBy=propName;
vm.reverse=!vm.reverse
}
}
})();
你需要 return $http.get
里面 getCustomers
:
return $http.get('./Services/customers.json')
我也遵循 John Papa 的风格指南,但我从未见过他这样做,因为一切都应该在函数闭包内,即:
(function () {
....
})();
但是是的,就像韦恩说的那样
return $http.get(...)
顺便说一句,如果他确实谈到要在关闭外返回,请尝试告诉我在哪里。