Область вложенных директив Angular не используется совместно

У меня есть директива ввода, которая берет входное значение из html и обновляет угловую модель:

.directive('input', function($parse) {
  return {
    restrict: 'E',
    require: '?ngModel',
    link: function(scope, element, attrs) {
      if (attrs.ngModel && attrs.value) {
        $parse(attrs.ngModel).assign(scope, attrs.value);
      }
    }
  };
});

Затем у меня есть свой html, который имеет значение html и угловую модель:

  <div ng-controller="form" class="form">
    <h2>Form with controller</h2>
    <input type="text" ng-model="item.example" value="defaultValue">
    <button ng-click="checkValue()">Check value</button>
  </div>

Когда я запускаю тест в качестве контроллера, он работает отлично:

.controller('form', function($scope) {
  $scope.item = {};
  $scope.checkValue = function() {
    console.log('checkValue', $scope.item);
  };
})

Но как вложенная директива она не получает значения:

.directive('form', function() {
  return {
    restrict: 'C',
    link: function(scope, element, attrs) {
      scope.item = {};
      scope.checkValue = function() {
        console.log('checkValue', scope.item);
      };
    }
  };
})

Я предполагаю, что области директив являются отдельными, поэтому одна директива не влияет на другую, однако она отлично работает с директивой контроллер +?

Я попытался изменить области директив, используя предложения здесь: Почему мои директивы AngularJS общий доступ?

.directive('input', function($parse) {
  return {
    restrict: 'E',
    require: '?ngModel',
    scope: true,
    link: function(scope, element, attrs) {
      if (attrs.ngModel && attrs.value) {
        $parse(attrs.ngModel).assign(scope, attrs.value);
      }
    }
  };
});

Но не могу заставить две директивы использовать одну и ту же область. Это возможно?

Вот моя демонстрация, показывающая два подхода: https://jsfiddle.net/kmturley/L1bky0g0/1/


person Kim T    schedule 01.02.2016    source источник
comment
Чего именно вы пытаетесь достичь? Вероятно, есть способ заставить это работать, но я уверен, что такого взаимодействия слоев друг с другом можно избежать...   -  person LoremIpsum    schedule 01.02.2016
comment
Все, что мне нужно, если входное значение по умолчанию будет передано в модель. Но Angular не передает это автоматически, поэтому мне нужно либо вручную найти значение и модель, либо добавить директиву, чтобы иметь эту функциональность. Проблемы в том, что это уже внутри другой директивы! Это исходная проблема: stackoverflow.com/questions/10610282/   -  person Kim T    schedule 01.02.2016
comment
Почему бы вам не инициализировать свою модель с вашего контроллера???   -  person LoremIpsum    schedule 02.02.2016
comment
да, это один из вариантов (показан в моей скрипке), просто интересно, можно ли разделить область действия между директивами   -  person Kim T    schedule 02.02.2016
comment
Это так, но не рекомендуется полагаться на родственные элементы. Лучше использовать службу, если вы хотите поделиться вещами между директивами. Однако здесь вы просто хотите инициализировать значение, и это не должно быть обязанностью директивы.   -  person LoremIpsum    schedule 02.02.2016
comment
Значение по умолчанию является частью статического HTML-шаблона, пользовательские настройки и модель сохраняются на сервере. так что это правильное разделение функциональности. Также это строка, которую я хотел бы иметь в шаблоне, если мне нужно ее перевести.   -  person Kim T    schedule 02.02.2016
comment
@LoremIpsum Я почти у цели, но есть последняя ошибка, которая не позволяет отображать окончательное значение. Я предполагаю, что это потому, что директивы загружаются вместе, поэтому значения перезаписывают друг друга jsfiddle.net/kmturley/ L1bky0g0/2   -  person Kim T    schedule 09.02.2016