下面有我的数据工厂,它返回一个承诺
.factory('DataService', function($http, $document, CreatorService) {
promise = null;
jsonData = null;
return {
getJsonDataFromApi: function () {
promise = $http.get('/test');
return promise;
}
}
getJsonData: function () {
return jsonData;
},
setJsonData: function (data) {
jsonData = data;
}
}
我的控制器如下使用此服务
.controller('MainCtrl', function ($scope, $http, $uibModal, DataService, StyleService, CreatorService) {
$scope.dataService = DataService;
$scope.dataService.getJsonDataFromApi().success(function (data) {
$scope.dataService.setJsonData(data['content']);
$scope.jsonData = $scope.dataService.getJsonData();
正如您所看到的,我正在尝试通过$scope.jsonData
将jsonData
绑定到数据服务$scope.jsonData = $scope.dataService.getJsonData();
对象,但这似乎不起作用。
如果我更新$scope.jsonData()
的值,则$scope.dataService.getJsonData()
返回的值不会更改。
例如,如果我这样做
$scope.jsonData = {};
console.log($scope.jsonData);
console.log($scope.dataService.getJsonData());
输出
{}
Object{...}
我原本以为它们是一样的。如果我更改控制器范围对象,我似乎无法更新服务对象,如果我对服务对象进行更改,也无法更新控制器范围对象。我想避免使用手表。
答案 0 :(得分:1)
双向数据绑定用于绑定您的$scope
和视图。不适用于控制器和服务。因此,如果您真的需要这样的东西,那么您需要$watch
并在每次更改时将数据设置为服务。