У меня есть текстовое поле в контроллере, который привязан к модели name
. Там есть директива внутри контроллера и есть еще одно текстовое поле внутри директивы, которое привязано к той же модели name
:
<div class="border" ng-controller="editCtrl">
Controller: editCtrl <br/>
<input type="text" ng-model="name" />
<br/>
<tabs>
Directive: tabs <br/>
<input type="text" ng-model="name"/>
</tabs>
</div>
mod.directive('tabs', function() {
return {
restrict: 'E',
transclude: true,
template:
'<div class="border" ng-transclude></div>',
};
});
Когда вы вводите что-то во внешнем текстовом поле, оно отображается во внутреннем текстовом поле, но если вы вводите что-то во внутреннем текстовом поле, оно перестает работать, то есть оба текстовых поля больше не отражают одно и то же значение.
См. пример: http://jsfiddle.net/uzairfarooq/MNBLd/
Я также попытался использовать двухстороннюю привязку attr (scope: {name: '='}
), но она дает синтаксическую ошибку. И использование scope: {name: '@'}
имеет тот же эффект.
Любая помощь будет принята с благодарностью.
В дополнение к принятому ответу эта статья действительно помогла мне понять прототипическое наследование в дочерних блоках. Я настоятельно рекомендую всем, у кого проблемы с областями, прочитать его полностью.