#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. Хорошо, я обновил свое решение. Вы просто можете получить доступ к области и изменить ее напрямую.