2014-11-11 6 views
0

Я делаю адресную книгу. Помимо базовых контактных данных, у каждого контакта также есть поле roles, которое само по себе представляет собой множество разных ролей. Они также имеют поле permissions и поле certifications.Выполнение одностороннего двустороннего связывания в AngularJS

Дизайн моей адресной книги похож на обычный 2-панельный дизайн; слева - список всех имен. При выборе контакта, детали показать на право:

<div addressbook> 
    <!-- This is the list of names --> 
    <div list> 

    <!-- This is the selected contact --> 
    <div contact> 

В идеале я хотел бы передать список list используя одностороннюю связывания. Затем выбранный контакт двухстороннее связывание между addressbook и list и одностороннего связывания contact:

<div addressbook> 
    <!-- This is the list of names --> 
    <div list="{{ list }}" selected-contact="contact"> 

    <!-- This is the selected contact --> 
    <div contact="{{ contact }}"> 

Я боюсь, что приложение будет работать медленно, если я прохожу list как один-путь связывания, так как {{list}} становится очень длинная строка, которую нужно разобрать JSON позже. Я чувствую, что двусторонняя привязка будет быстрее!

Это правда? Могу ли я столкнуться с проблемами производительности, если я сохраню код так, как есть?

ответ

0

В контексте директивы полезно подумать о @ s и = s как "bind to value of a DOM attribute" and "bind to the value of a scope property", а не думать об этом как о одностороннем или двустороннем.

@ s подходят для передачи в вашу директиву тривиальных значений, таких как короткие строки или цифры. Когда у вас есть что-то нетривиальное, как фактический объект JavaScript (ваш list), который вам нужно указать из вашей директивы, привяжите его с помощью =.

+0

Хорошо, что это имеет смысл. Теперь, если я хочу убедиться, что данные также связаны друг с другом? Поэтому в этом случае я не хочу, чтобы основной «список» изменялся, но, возможно, «list» в дочерней директиве мог измениться. Как вы это сделаете, если вы передадите элементы с помощью '='? – Kousha

+0

в функции ссылки вашей директивы, сделайте копию списка, то есть 'scope.myList = angular.copy (scope.list)'. Затем ваш код должен ссылаться на 'scope.myList', а не на' scope.list'. – user2943490

+0

Ну да, но это не самая лучшая стратегия? Кажется, это скорее хак, чем решение. – Kousha

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