2016-10-04 3 views
0

Я надеюсь, что все будут здорово.Многопользовательская связь с одним контроллером? Лучшее решение?

У меня есть один контроллер с несколькими видами. Я хочу, чтобы удалить уведомление с Список A, тогда модель Список B должен быть обновлен.

enter image description here Лучшее & оптимизированное решение этой проблемы?

Одним из способов является то, что я делаю услугу и разделяю модель списка с обоими контроллерами. Но есть ли другой лучший способ?

ответ

0

Либо вы делитесь данными через сервис или завод, как вы упомянули. Или вы можете использовать события $rootScope.$broadcast для связи между экземплярами контроллера.

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

<my-first-directive shared-data="sharedData"></my-directive> 
<my-second-directive shared-data="sharedData"></my-directive> 

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

0

1. Вы можете поделиться переменными корневого каталога для просмотра списка.

Использование RootScope переменных и функций, не являются профессиональными

2. Вы можете использовать один контроллер для обоих представлений.

Если коды двух видов не так много, вы можете использовать один контроллер для обоих видов.

+0

контроллеры не одноэлементны и два экземпляра не будет иметь возможность доступа друг друга областей ! – Amygdaloideum

+0

http://stackoverflow.com/questions/21919962/share-data-between-angularjs-controllers –

+0

Да, в этом примере контроллеры обмениваются данными через завод, а не с одним и тем же экземпляром одного и того же контроллера. – Amygdaloideum

0

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

$stateProvider.state("my_state", { 
     url: "/myView", 
     templateUrl: "/views/my-view.html", 
     controller: "MyCtrl" 
    }); 

P.S. Не используйте $rootScope для этих целей, это не очень хорошая практика!)

+0

Вы не представили никакого примера, как обмениваться моделями данных между экземплярами контроллера. – Amygdaloideum

0

Попробуйте сделать это.

.when('/company/ticket/log/:company_id', { 
     templateUrl: 'views/company/company_ticket_log.html?v=' + CONFIG.VER, 
     data: { 
      authorizedRoles: [USER_TYPES.LOGINUSER] 
     } 
}); 

При попытке сделать это, используйте данные списка в URL и список данных может быть общим контроллером, как const.js

Смежные вопросы