Angularjs - Getter and Setter и привязка данных нескольких контроллеров - PullRequest
0 голосов
/ 25 мая 2018

Я не могу понять этот метод контроллеров привязки данных через службу.Читая сообщения на этом сайте, люди, похоже, рекомендуют держаться подальше от $ watch из-за накладных расходов.Поэтому я вижу, что многие люди используют обещания, но, похоже, не могут заставить начальные данные работать.

В приложении «Моя страница Signle» есть 2 таблицы на 2 отдельных контроллерах и третий контроллер, имеющий форму для редактирования данных.У меня есть простая кнопка отправки, которая установит новые данные для повторной синхронизации на всех контроллерах.Вот что я получил:

Первый контроллер

GDI_App.controller('first_Controller', function ($scope, Service) {

    Service.get_data();
    $scope.Current.incidents = Service.current_data(); //returns $$State;

});

Второй контроллер

GDI_App.controller('second_Controller', function ($scope, Service) {

    Service.get_data();
    $scope.Current.incidents = Service.current_data(); //returns $$State;

});

Третий контроллер, который устанавливает данные при отправке

GDI_App.controller('third_Controller', function ($scope, Service) {

   $scope.submit = Service.set_data(data);

});

Служба

GDI_App.factory('Service', function($q) {

    var Current ={}
    Current.Data = [
       { "Data1": "123123", "Data2": "15437"  },
       { "Data1": "432234", "Data2": "146"  },
       { "Data1": "45654", "Data2": "3534"  },
       { "Data1": "76587", "Data2": "78978"  },
       { "Data1": "2342", "Data2": "5345878"  },
       { "Data1": "178", "Data2": "34534"  },
       { "Data1": "173838", "Data2": "354534"  },
    ];

    return{

         get_data: function(){
            return $q.when(Fake_Data)
            .then(function(data) {
                return data;
            });
        }

        set_data: function(data){
            Current.Data = data;
        }

    }
});

Кто-нибудь знает, чего мне не хватает?

1 Ответ

0 голосов
/ 25 мая 2018

Для контроллеров, которые вы хотите обновить без необходимости явного получения данных из службы, я бы предложил иметь отдельную функцию, которая получает значение «кэшировано» из службы, которая устанавливается установщиком.

Прямо сейчас вы привязаны к извлечению, в основном к каждому дайджесту (если вы использовали этот вызов), который будет просто повторять это обещание, если вы связываете его напрямую с функцией.Так что вместо этого - используйте метод получения и псевдоним вызова модели с ограничениями в контроллере.

Как у вас есть, он только получает его при загрузке контроллера и не знает, когда обновить / захватить эту модельесли вы не использовали часы.

$scope.display = Service.get;

В представлении просто выполните

<div ng-repeat="mystuff in display()"></div>

Так что, как только значение обновляется какой-либо другой службой, оно просто обновляется в следующем дайджесте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...