Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 16.06.2013, 10:24
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

На данный момент в портируемом проекте я использую один контроллер на страницу, всё остальное реализовано через директивы, все взаимосвязи указаны в атрибутах директив.

В твоём случае доступ к scope родителя можно получить через $scope.$parent если не ошибаюсь, после изменения parent можно опубликовать изменения при помощи $scope.$parent.$apply()
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 16.06.2013 в 10:42.
Ответить с цитированием
  #12 (permalink)  
Старый 16.06.2013, 10:50
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 553

Сообщение от MaximusFT Посмотреть сообщение
Подскажите как можно сделать из Скопа - функцию чтобы внутри нее можно было вызывать другие Скопы и с ними работать.
Вот так делать не стоит. Поначалу тоже что-то подобное мутил. В итоге намухлевал с иерархией областей видимости, пробовал перемещаться по областям через свойства $parent, lastChild и т.п. И получил кучу проблем. Тут самое верное решение разделять данные через сервис, пусть даже его придется 100500 раз указывать в зависимостях.
$scope.paginator.setPages($scope.items.length);

Такого быть не должно. Нужно как-то так:
myService.paginator.setPages(items.length);

$scope только для передачи данных в вид и такое его использование рано или поздно приведет к проблемам.

Также можно использовать механизм событий
$emit('MyEvent') и $broadcast('MyEvent')

И писать как-то так
$scope.$on('MyEvent', function() {
    $scope.count++;
  });

Ну или просто передавать данные через $rootScope и подписываться на них через $watch
Ответить с цитированием
  #13 (permalink)  
Старый 16.06.2013, 12:25
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Цитата:
Подскажите как можно сделать из Скопа - функцию чтобы внутри нее можно было вызывать другие Скопы и с ними работать.
Присоеденяюсь к Shitbox. Сделать так можно но делать этого не стоит.

Нужно стремится по возможности к слабому связыванию компонентов. Это аксиома проектирования в любом языке, любом фреймворке, не зависимо от того какую программу вы пишете.

Из красивых решений это атрибуты директив, либо события. Атрибуты деректив это в каком то смысле шлюзы компонентов, и через такие шлюзы можно относительно безопасно состыковывать компоненты UI между собой.

Можно иметь общие данные для обсолютно независимых котролов и деректив, но придётся их хранить в сервисе и подключать сервис там где нужен доступ к этим данным. Вместе с данными в сервисе желательно хранить и методы обработки этих данных, такие методы можно будет вызывать из любого контрола где используется этот сервис (в 7ом посте писал об этом). Сделать сервис частью scope тоже труда не составляет.

Сервис конечно не обеспечивает синхронизацию данных между различными компонентами, иными словами если один контроллер изменит данные в сервисе, то другой контроллер об этом изменении не узнает. Если нужна синхронизация то в качестве решения может проканать rootScope. Но так как обьект глобальный то злоупотреблять им не стоит, если всё пихать в rootScope то при изменении одних данных будет дёргаться слишком много лишних обработчиков watch. Довольно плохо если объекты и свойства в rootScope будут создаваться не централизованно а размазано по различным контроллерам, такое приложение будет сложно понимать.

Из любопытных идей мне на ум приходит создание сервиса со своим cобственным scope. Такой финт позволит сочетать преимущества сервиса, с возможностью синхронизации при изменении данных при этом избегая универсального глобального объекта $rootScope. Получится что то вроде "активной модели". Однако в angular потребности в подобных инструментах у меня пока не возникало.

Собрать же кучу скопов различных компонентов в одной функции это возможно худшее из всех возможных решений.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 16.06.2013 в 14:25.
Ответить с цитированием
  #14 (permalink)  
Старый 17.06.2013, 09:42
Интересующийся
Отправить личное сообщение для MaximusFT Посмотреть профиль Найти все сообщения от MaximusFT
 
Регистрация: 07.06.2013
Сообщений: 14

Огромнейшее спасибо!
Буду переваривать информацию... так как скорее всего еще не до конца понял точку применения AngularJS.
От сюда возник вопрос, но уже в новой теме.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
передать анонимную функцию, вызывающую другую функцию с нужными параметрами Ваяс Общие вопросы Javascript 5 21.02.2013 19:12
Выполнить функцию заранее неизвестную Neokortex jQuery 2 13.02.2012 11:41
checkbox включен запускаем одну функцию выключен другую Sadist_dead Элементы интерфейса 11 27.09.2011 10:46
проблема с передачей параметров в функцию bartonom Элементы интерфейса 4 19.09.2011 12:41
Как получить указатель на элемент вызвавший функцию pelayo Общие вопросы Javascript 9 29.06.2010 23:32