Изолировать и совместно использовать область действия в директиве AngularJS

0

Новый для Углового, поэтому не уверен, правильно ли я задал свой вопрос.

Итак, у меня есть форма.

<form ng-controller="myController" action="" method="get">
    <div myDirective> 
       <input ng-model="question.sex" value="male" type="radio">
       <input ng-model="question.sex" value="female" type="radio">
       <button ng-click="log(LogThisQuestionAnsware())"></button>
    </div>
    <div myDirective> 
       <input ng-model="question.agree" value="no" type="radio">
       <input ng-model="question.agree" value="yes" type="radio">\
       <button ng-click="log(LogThisQuestionAnsware())"></button>
    </div>
</form>

Поэтому моя цель - зарегистрировать текущий ответ "вопрос". при нажатии кнопки.

Как я могу получить доступ к локальному вопросу в myDirective отдельно от моей второй директивы и иметь в области управления тоже.

--[ Редактировать: ]--

Хорошо, это мой сценарий. http://jsfiddle.net/y5esnm09/5 Каждая кнопка должна самостоятельно регистрировать собственное значение директивы, а не оба значения радио, если они выбраны.

  • 0
    Обе директивы должны связываться с одним и тем же объектом вопроса, но иметь свои собственные области видимости, отдельно от друг друга?
  • 0
    да, думаю, это то, что я хочу
Теги:
scope
controller
angular-directive
directive

1 ответ

0
Лучший ответ

Если я правильно понял ваш вопрос, вы хотите, чтобы оба экземпляра директивы привязывались к одному и тому же объекту вопроса, но их области были отделены друг от друга:

Настройте двустороннюю привязку данных между вашей директивой и вашим контроллером, например:

<div my-directive question="question">
 <!-- the rest -->

angular.module('your.module').directive('myDirective', function() {
   return {
      scope: question: '=',
       //other props
   }

Это гарантирует, что обе директивы привязаны к одному объекту вопроса, но имеют свои собственные отдельные области.

Альтернативой было бы установить свойство scope равным true, таким образом они будут создавать дочернюю область вашего контроллера.

EDIT: скрипка, демонстрирующая двустороннюю привязку:

http://jsfiddle.net/L0eqf4qe/

PS: Я преобразовал myDirective в my-directive, угловой переведет змеиный футляр на camelCase для вас.

  • 0
    angular.module ('YourFinancialAdvisor'). directive ('myDirective', function () {return {scope: {question: '='}, ссылка: function (scope, el, attrs) {$ (el) .on (' click ', function (e) {console.log (scope.question);})},};}); !! вопрос не определен !! Вероятно, я могу использовать attrs.
  • 0
    @ СвободенРоб Это не должно быть неопределенным, не могли бы вы опубликовать свой код контроллера?
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню