我有角JS一個服務,其被定義爲如下:AngularJS雙向數據控制器和服務之間的結合
'use strict';
angular.module('Offering.AccountService', [])
.service('Account', function($http, config) {
var account = this;
account.accountDetails = {};
this.getAccountDetails = function(){
var request = $http({
method: 'GET',
url: config.accountURL,
headers: {
'X-Parse-Application-Id': config.applicationID,
'X-Parse-REST-API-Key': config.restAPIKey,
}
})
.success(function(data, status, headers, config) {
console.log('Successfully aqquired account details');
account.accountDetails = data.results[0];
})
.error(function(data, status, headers, config) {
console.warn(status);
});
}
});
此服務調出到端點以檢索某些數據,我打電話在該方法中主模塊的運行的功能如下所示:
'use strict';
angular.module('Offering', [
'routerRoutes'
])
.run(function(Account){
Account.getAccountDetails();
})
在我的控制器,我有一個所謂的平衡變量,其中我要存儲從服務中檢索到的值,如在下面的代碼如:
'use strict';
angular.module('Offering.HomeController', [])
.controller('HomeCtrl', function(Account) {
this.data = {
message: "Account Details",
updateBalance: function() {
Account.getAccountDetails()
},
balance: Account.accountDetails.balance
}
// this.$watch(
// function() { return Account.accountDetails; },
// function (data) {
// $scope.data.balance = data.balance
// },
// true
//);
})
控制器數據對象設置完成後,返回服務中的數據,因此餘額字段未被填充。如果我使用註釋掉的$ scope.watch方法,那麼數據對象會正確填充。但是,我假設不需要這樣做,因爲服務和控制器之間存在雙向數據綁定。任何幫助是極大的讚賞。謝謝 !
這通常是通過返回處理當承諾得到解決時,承諾從您的服務中設置數據並將其設置在您的控制器中。 – Bert 2015-02-23 18:39:34