服务和控制器之间双向数据绑定的问题

时间:2016-06-22 13:00:16

标签: javascript angularjs

下面有我的数据工厂,它返回一个承诺

.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.jsonDatajsonData绑定到数据服务$scope.jsonData = $scope.dataService.getJsonData();对象,但这似乎不起作用。

如果我更新$scope.jsonData()的值,则$scope.dataService.getJsonData()返回的值不会更改。

例如,如果我这样做

    $scope.jsonData = {};

    console.log($scope.jsonData);
    console.log($scope.dataService.getJsonData());

输出

{}
Object{...}

我原本以为它们是一样的。如果我更改控制器范围对象,我似乎无法更新服务对象,如果我对服务对象进行更改,也无法更新控制器范围对象。我想避免使用手表。

1 个答案:

答案 0 :(得分:1)

双向数据绑定用于绑定您的$scope和视图。不适用于控制器和服务。因此,如果您真的需要这样的东西,那么您需要$watch并在每次更改时将数据设置为服务。