我有一个服务:
angular.module('cfd')
.service('StudentService', [ '$http',
function ($http) {
// get some data via the $http
var path = 'data/people/students.json';
var students = $http.get(path).then(function (resp) {
return resp.data;
});
//save method create a new student if not already exists
//else update the existing object
this.save = function (student) {
if (student.id == null) {
//if this is new student, add it in students array
$scope.students.push(student);
} else {
//for existing student, find this student using id
//and update it.
for (i in students) {
if (students[i].id == student.id) {
students[i] = student;
}
}
}
};
但是当我调用save()
时,我无法访问$scope
,会收到ReferenceError: $scope未定义
的错误。因此,对我来说,逻辑上的下一步是为save()
提供$scope
,因此我还必须将其提供/注入到service
中。所以如果我这样做:
.service('StudentService', [ '$http', '$scope',
function ($http, $scope) {
我遇到了以下错误:
错误信息中的链接(哇,这很不错!)让我知道这是关于注入的,并且可能与JavaScript文件的声明顺序有关。我尝试在Error: [$injector:unpr] 未知的提供者: $scopeProvider <- $scope <- StudentService
index.html
中重新排列它们,但我认为问题更简单,比如我注入它们的方式。使用Angular-UI和Angular-UI-Router。
service
或factory
没有太大区别 - 最终你都会得到一个Angular服务。只要确保你理解每个选项的工作原理,并确定它是否适合你的需求即可。 - gkalpak$scope.students
会是空的吗?或者如果这个代码块正在进行中,$scope.students
会部分填充吗?students.push(student);
- Yc Zhangstudents
的方式(即导出对初始students
数组的引用),如果您执行students = data
,则只有您内部引用会更改。导出的students
数组(尤其是我们在控制器中抓取的副本)仍将引用旧数组。 - gkalpak