Angularjs - Getter и Setter и привязка данных нескольких контроллеров

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

Приложение My Signle page имеет 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;
        }

    }
});

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

какая у вас версия angularjs? И включает ли это взаимодействие сервер? Потому что если нет - обещания тебе не нужны вообще

Petr Averyanov 25.05.2018 14:15

Начните с просмотра сообщений об ошибках в консоли разработчика.

georgeawg 25.05.2018 14:19

Использование последней версии angularjs 1.6

Daniel Ellison 25.05.2018 14:23
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
38
1

Ответы 1

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

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

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

$scope.display = Service.get;

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

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

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

Спасибо, но в моем случае это не сработает. Мне нужно, чтобы это работало через метод контроллера / службы из-за моей настройки.

Daniel Ellison 25.05.2018 23:14

Как бы это не сработало? Вы получаете доступ к двум контроллерам - которые напрямую ссылаются на модель, которая устанавливается из выборки?

DDT 26.05.2018 06:09

Я имел в виду, что с моей текущей настройкой это решение не будет совместимо. В любом случае спасибо.

Daniel Ellison 26.05.2018 19:06

Как ваша текущая установка несовместима?

DDT 26.05.2018 20:07

Вы ведь понимаете, что это попадет в дайджест, верно? Таким образом, вы просто получаете значение при загрузке контроллера - при инициализации, заставляя смотреть. Вы можете генерировать, а затем обновлять контроллеры, когда значение обновляется в службе, или выполните указанные выше действия. В противном случае удачи.

DDT 26.05.2018 20:14

Другие вопросы по теме