Я должен написать директиву, которая будет иметь следующее поведение:
Контроллер:
vm.mymodel = 'Hello World'
Html:
<custom-input mydirective="{propbind: 'data-value', propmodel: vm.mymodel}"></custom-input>
Я хотел бы, чтобы мои пользовательскиевходные данные должны быть преобразованы следующим образом:
<custom-input data-value="{{vm.mymodel}}"></custom-input>
- Когда я обновляю vm.mymodel с контроллера, атрибут data-value должен измениться.
- Когда я обновляю data-значение, vm.mymodel также должен быть обновлен.
- Я не могу использовать директиву ng-mmodel для пользовательского ввода (он использует значение данных и к нему применены внутренние функции)
Итак, вот что я пытался сделать:
- В функции компиляции моей директивы установите значение атрибута scope.propbind равным "{{propmodel}}", а затем удалите "mydirective""атрибут.Но у меня, похоже, нет доступа к этой области.Однако, если я использую element.attr ('data-value', 'hello world'), я вижу, что мои data-value правильно установлены
- Я попытался сделать то же самое в функции link, но значения моей области видимостине определены
- Я также пробовал в функции контроллера, но моя область также пуста, плюс у меня нет доступа к attr или элементу.
var app = angular.module('myApp', []);
app.controller('myctrl', function($scope) {
var vm = this;
this.mymodel = 'Hello world !';
});
app.directive('mydirective', function () {
return {
restrict: 'A',
replace: false,
transclude: false,
scope: {
bindingvalue: '='
},
compile: function(element) {
//remove the element for clarity
element.removeAttr('mydirective');
},
link: function($scope, elem, attr) {
//set the attribute
attr.$set($scope.bindingvalue.propbind, $scope.bindingvalue.propmodel);
//Observe the attribute value for changes
attr.$observe($scope.bindingvalue.propbind, function(value) {
$scope.bindingvalue.propmodel = value;
})
},
controller: function($scope, $element) {
//Nothing here yet
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
<div ng-app="myApp" ng-controller="myctrl as vm">
<input mydirective="{propbind: 'data-value', propmodel: vm.mymodel}" type="text"/>
model value : {{vm.mymodel}}
</div>
Можете ли вы мне помочь?Моя логика хороша для моей проблемы?Я думаю, что если мне удастся получить значения моей области в моей функции ссылки, все мысли могут работать.
Спасибо