Модифицированный проанализированный связанный атрибут без изолированной области

#angularjs

#angularjs

Вопрос:

У меня есть следующий HTML:

 <div ng-app="app">
  <div ng-controller="FooController">
    <p>{{ values.data }}</p>
    <div foo-bar="values.data"></div>
  </div>
</div>
 

values.data определяется в FooController , и он передается директиве fooBar атрибута (которая не имеет изолированной области видимости), чтобы эта директива могла изменять ее напрямую.

В fooBar директиве я анализирую атрибут и присваиваю значение, однако значение в FooController не изменяется, только локальная fooBar копия.

Как я могу это сделать?

Я создал Codepen, демонстрирующий это: http://codepen.io/jviotti/pen/ghnkc?editors=101 В Codepen печатный текст должен быть Baz , а не Foo .

Ответ №1:

Я могу предоставить вам решение проблемы в js, поскольку я не знаком с Coffee. Синтаксис для установки данных с помощью parse отличается

 getter = $parse(attributes.fooBar);
setter=getter.assign;
setter(scope,"Baz");
 

Также смотрите Документацию https://docs.angularjs.org/api/ng/service /$синтаксический анализ

Ответ №2:

Вот одно из решений, использующих область напрямую:

 app.directive 'fooBar', ($parse) ->
  restrict: 'E'
  link: (scope, element, attributes) ->
    scope.values.data = 'Baz'
 

Кстати: я только что увидел, что вы ограничиваете свой подход к element ( 'E' ) и пытаетесь применить его в качестве атрибута в вашем примере. Таким образом, директива не применяется.

Комментарии:

1. Это restrict: E была проблема в Codepen. Так и должно было быть A . Как следует из названия моего вопроса, я пытаюсь выполнить это без изолированной области.

2. Мне очень жаль, я это пропустил. Почему вы не хотите использовать область видимости?

3. Для моей директивы важно не создавать изолированную область, не являющуюся дочерней. Это какой-то декоратор.

4. Хорошо, я обновил свое решение. Вы просто можете получить доступ к области и изменить ее напрямую.