Angularjs 无法使用angular promise访问javascript本地函数

Angularjs 无法使用angular promise访问javascript本地函数,angularjs,Angularjs,在上面的代码中,我无法访问populateData方法from then函数 在函数的作用域中,我得到self=this的对象是我在应用程序中已经创建的其他对象 我认为范围有问题。如果这不是我的承诺,那么我将使用以下代码 (function () { 'use strict'; angular .module('residentialApp') .factory('LockerBank', ['$q', 'lockerbankService', 'notificationSer

在上面的代码中,我无法访问populateData方法from then函数

在函数的作用域中,我得到self=this的对象是我在应用程序中已经创建的其他对象

我认为范围有问题。如果这不是我的承诺,那么我将使用以下代码

(function () {
'use strict';

angular
    .module('residentialApp')
    .factory('LockerBank', ['$q', 'lockerbankService', 'notificationService', 'rfc4122', 'LanguageResourceService', 'StringFormat'
        , function ($q, lockerbankService, notificationService, rfc4122, LanguageResourceService, StringFormat) {

            var lockerBank = function (lockerBankId, lockerName) {

                if (lockerName === undefined) {
                    lockerName = "";
                }

                self=this;

                if (lockerBankId === undefined) {
                    lockerBankId = "";
                }
                this.name = lockerName;
                this.id = lockerBankId;

                this.description = "";
                this.isActive = "";
                this.relayEndPointName = "";
                this.lockerBankCode = "";
                this.createdUtcDate = "";
                this.lastHeartBeatUtcDate = "";
                this.propertyId = "";
                this.mailRoomId = "";
                this.address = "";
                this.apiToken = "";
                this.status = "";

                this.lastHeatBeatDateDisplay = "";
                this.lastUpdateInSecond = "";
                this.createdOnDateDisplay = "";
                this.organisationId = "";

                return this;
            };

            lockerBank.prototype = {
                initialize: function () {

                },

                loadFromServer: function (propertyId) {

                    var defer = $q.defer();
                    if (this.id === undefined || this.id == null) {
                        defer.resolve(null);
                    }
                    else {
                        lockerbankService
                            .loadLockerBank(this.id)
                            .then(function success(data) {

                                // The problem is here
                                self.populateData(data);
                                var newObject = angular.copy(this);
                                defer.resolve(newObject);
                            }, function failure(response) {
                                defer.reject(response);
                            });
                    }
                    return defer.promise;

                },


                populateData: function (apiData) {
                    if (apiData === undefined || apiData == null) {
                        return;
                    }

                    if (this.id === undefined || this.id == null) {
                        this.id = apiData.Id;
                    }

                }
            };

            return lockerBank;
        }]);

})();

有谁能帮我解决这个范围问题吗?

我不知道您在
loadFromServer
函数中声明了
self
。试试这个:

lockerbankService.loadLockerBank(this.id)
.then(function success(data) {
   self.populateData(data);
   var newObject = angular.copy(this);
   defer.resolve(newObject);
}.bind(this))

谢谢我在构造函数中添加了self=this。这是一个简单的解决办法,我不知道我怎么会忽视这一点。谢谢
loadFromServer: function (propertyId) {
    var self = this;
    var defer = $q.defer();
    ....