У меня есть директива ввода, которая берет входное значение из 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/