我正在尝试基于JSON文件实现Master-Detail View。 PHP运行良好。它带来了应有的数据。 Config.js或controller.js工作正常。但是,我收到错误,如下所示。 SET属性未定义。
我是初学者。我认为把'this .___'设置属性。但是,似乎我失踪了。如果没有,那可能是什么错? 我从以下链接中获取了参考资料。
有谁能告诉我有什么问题?也许,如何设置属性?
(function () {
'use strict';
var app = angular.module('myProject', []);
app.service('ProjectService', function($http) {
$http.get("projects_read.php", {})
.then(function(response){
var pjts = response.data;
this.getProjects = function() { //ERROR occurs
return pjts;
};
this.getProject = function(id) {
for (var i = 0; i < pjts.length; i++) {
if (pjts[i].id === id) {
return pjts[i];
}
}
return null;
}
console.log(pjts);
});
})
})();
[ERROR] 无法设置未定义的属性'getProjects'。
[参考链接] http://plnkr.co/edit/VJxlqguJZGrIutAFLCNc?p=preview
提前感谢您的协助!
答案 0 :(得分:1)
您在错误的上下文(getProjects
)
this
回调function(response){}
创建了一个新的上下文(在严格模式下未定义为什么你得到:无法设置属性&#39; getProjects&#39; of undefined)尝试保存服务的引用在承诺之外并使用该背景。
app.service('ProjectService', function($http) {
var _this = this; //save context of the service
$http.get("projects_read.php", {})
.then(function(response){
var pjts = response.data;
_this.getProjects = function() {
return pjts;
};
this.getProject = function(id) {
for (var i = 0; i < pjts.length; i++) {
if (pjts[i].id === id) {
return pjts[i];
}
}
return null;
}
console.log(pjts);
});
})
答案 1 :(得分:1)
正如卡里姆所指出的,你可以通过使用&#34; var _this = this&#34;
来解决它。另一种解决方案是绑定它:
(function () {
'use strict';
var app = angular.module('myProject', []);
app.service('ProjectService', function($http) {
$http.get("projects_read.php", {})
.then(function(response){
var pjts = response.data;
this.getProjects = function() { //ERROR occurs
return pjts;
};
this.getProject = function(id) {
for (var i = 0; i < pjts.length; i++) {
if (pjts[i].id === id) {
return pjts[i];
}
}
return null;
}
console.log(pjts);
}.bind(this));
})
})();