Answer the question
In order to leave comments, you need to log in
How to bind custom directive value to custom directive from parent scope?
Hi everybody! There is a problem with data transfer and their binding into a custom directive.
When passing data through ngModel to a custom directive with a local scope, the data is not bound.
My first directive is a input
form. To be more precise, this is a double ng-repeat
template that runs through the template object and data, compares them and creates a form with inputs. Everything works fine, but I decided to make it a input
custom directive. Here is the result:
<div ng-repeat="item in head">
<div ng-repeat="(key, value) in data" ng-if="key === item.name">
<labe>{{item.title}}</label>
<div>
<!-- Моя кастомная директива инпутов, которая привязывает "data[key]" -->
<custom-tag type="item.type" tag-class="form-control" ng-model="data[key]"></custom-tag>
</div>
</div>
</div>
<div class="control-group">
<!-- Еще одна директива (это кнопка сохранения), которая в конечном результате забирает данные с инпутов и обновляет/сохраняет модель -->
<twins-buttons config="buttons" data="data"></twins-buttons>
</div>
.directive('customTag', function() {
return {
scope: {
type: "="
},
require: '^ngModel', // Запрашиваю ng-model с parrent scope, так как, у этой свой локальный скоуп
restrict: 'E',
compile: function(el, attr) {
var input = angular.element('<input/>'); // далее создаю инпут элемент
el.replaceWith(input); // после чего меняю кастомный тег на созданный инпут
return function linking($scope, el, attr, ngModel) {
// ngModel - как я понима должна быть ссылка на модель
//
var mod = ngModel.$ViewValue;
el.attr('ng-model, mod) // поэтому создаем тег и добавляем туда наше значение из parent scope
Answer the question
In order to leave comments, you need to log in
А зачем вам нужен вот такой изврат с compile? Ведь можно просто сделать через template:
return {
require: '^ngModel',
template: '<input ng-model='mod'>',
scope: {
type: "=",
mod: "=",
},
}
1. Вам необязательно создавать скоуп в принципе, не то что закрытый.
.directive('customTag', function($parse) {
return {
require: '^ngModel', // Запрашиваю ng-model с parrent scope, так как, у этой свой локальный скоуп
restrict: 'E',
compile: function(el, attr) {
var input = angular.element('<input/>'); // далее создаю инпут элемент
el.replaceWith(input); // после чего меняю кастомный тег на созданный инпут
return function linking($scope, el, attr, ngModel) {
var type = $parse(attr.type)($scope); // Вот вам ваш тип
// ngModel - как я понима должна быть ссылка на модель
//
var mod = ngModel.$ViewValue;
el.attr('ng-model, mod) // поэтому создаем тег и добавляем туда наше значение из parent scope
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question