javascript - 使用主从 View 的 'this.' 表达式设置属性

标签 javascript angularjs

我正在尝试基于 JSON 文件实现主从 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);
            });
    })
})();

[错误] 无法设置未定义的属性“getProjects”。

[引用链接] http://plnkr.co/edit/VJxlqguJZGrIutAFLCNc?p=preview

预先感谢您的帮助!

最佳答案

您在错误的上下文 (this) 上设置属性 getProjects

回调function(response){}创建一个新的上下文(在严格模式下未定义,这就是为什么你会得到:Cannot set property 'getProjects' of undefined)尝试在外部保存服务的引用 promise 并使用该上下文。

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);
    });
  })

关于javascript - 使用主从 View 的 'this.' 表达式设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46954338/

相关文章:

javascript - 如何使用 page-mod 修改 JavaScript 加载的元素

javascript - jquery 绑定(bind)事件不会在手机上触发

javascript - 如何使用 javascript 在表单元素上添加 .click() 事件?

Javascript:从 X、Y 坐标获取方向的公式

javascript - 合并并匹配与 AngularJS 匹配的对象

javascript - ng-change 不适用于 ngTagInput

javascript - Angularjs 可编辑预输入不更新范围

javascript - AngularJS $apply 在输入类型范围上的 ngChange 之后不起作用

javascript - 如何在javascript中将字节码转换为zip文件

angularjs - 为什么这个一次性绑定(bind)表现得好像它不存在一样?