2015-01-14 3 views
0

Предположим, у вас есть страница, на которой у вас есть директива для поиска клиентов (1-я директива). Вы выполняете поиск, и вы возвращаете список клиентов с веб-сервера.Угловые директивы 2-х связывание и обновление

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

1-ая директива имеет декларацию как

<customer-res results="webserverResult"> 

и внутри customerRes директивы У меня есть что-то вроде

<div ng-repeat="x in results> 
{{name}} {{bla}} ... bla bla 
</div> 

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

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

Кроме того, даже если вы загружаете страницу до того, как результаты вернутся, как только они вернутся, они не должны обновлять элементы страницы?

+0

Я рекомендую опубликовать код ваших указаний. – angabriel

ответ

0

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

Вы всегда можете добавить

scope.$watch('myVariable', function(value) { 
    console.log('myVariable changed to:', value); 
}) 

к вашим директивам и видеть, когда его значение изменяется.

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

scope: { 
    myVariable: '=' 
} 
<my-directive my-variable="results.entries"></my-directive> 

Но имейте в виду, что при перезагрузке страницы, угловые перезапускается с нуля. Значение для каждой директивы его функция связи называется один раз и много других вещей под капотом. Ключевое слово - угловое digest cycle.

Надеюсь, что я смогу помочь с этим (чуть более широким) ответом.

+0

Итак, хотя я бы получил (через службу http) фактический массив результатов на один уровень выше директивы, 2-сторонняя привязка должна работать без необходимости использовать $ apply или что-то в этом роде, правильно? Я не работаю прямо сейчас, и проблема в том, что у меня есть проблема с множеством пользовательских зависимостей. Мне нужно было бы написать что-то новое (возможно, завтра и обновить пост). О, и кстати спасибо вам за поддержку. – GeorgeEch13

+0

до тех пор, пока переменная остается той же ссылкой, грубо говоря, вы правы. Угловое имеет много мест, где автоматически применяется область действия (триггер цикла дайджеста). например '' 'ng-click''',' '' ng-model''' и т. д.см. эту статью: http://angular-tips.com/blog/2013/08/watch-how-the-apply-runs-a-digest/. Я был бы счастлив, если бы вы проголосовали за мой ответ, как только у вас появится репутация. – angabriel

+0

Оказывается, у меня это было правильно, но если вы привязываете что-то к «результатам», а вместо этого набираете «resluts», это не ошибка структуры. Спасибо вам за вашу помощь, очень ценим и благодарим за ссылку. – GeorgeEch13

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