Вопрос прост - почему эта работа подобна этой работе?
angular.module('test1', [])
.directive('myDir', function() {
return {
replace:true,
restrict: 'E',
template: '<input type="text">',
};
}).directive('nogo', function() {
return {
replace:true,
restrict: 'E',
template: '<div><input type="text"></div>',
};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="test1">
<my-dir ng-model="test"></my-dir>
<nogo ng-model="test"></nogo>
<input type="text" ng-model="test"/>
</body>
Единственная разница между двумя директивами заключается в том, что шаблон для второго завернут с помощью "div".
Но одна работа, другая - нет.
На самом деле - я не понимаю, почему работает один. Но это.
Ваша проблема заключается в том, что вы применяете модель к <div>
, вот еще один вопрос с дополнительной информацией об этой проблеме.
И в этом конкретном случае вы можете изменить привязку в шаблоне, чтобы заставить его работать.
angular.module('test1', [])
.directive('myDir', function() {
return {
replace:true,
restrict: 'E',
template: '<input type="text">',
};
}).directive('nogo', function() {
return {
replace:true,
restrict: 'E',
template: '<div><input type="text" ng-model="test"></div>',
};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="test1">
<my-dir ng-model="test"></my-dir>
<nogo ng-model="test"></nogo>
<input type="text" ng-model="test"/>
</body>
Также в документах ng-model
говорится:
Директива ngModel связывает вход, select, textarea (или пользовательский контроль формы)
проблема в ng-модели не работает на div.
изменение:
.directive('nogo', function() {
return {
replace:true,
restrict: 'E',
template: '<div><input type="text"></div>',
};
});
в
.directive('nogo', function() {
return {
replace:true,
restrict: 'E',
template: '<div><input ng-model='test' type="text"></div>',
};
});
Не забудьте удалить ng-model из <nogo>*remove ng-model*</nogo>
он работает..