Учитывая, что у меня есть следующие две директивы.
1: Выбор пользовательского интерфейса Angular — эта директива использует изолированную область.
2: myDirective — в моей пользовательской директиве я также использую изолируемую область для доступа к значению ngModel.
Я получаю сообщение об ошибке «Несколько директив не может совместно использовать изолировать область». Вот как я объявляю область изоляции в своей директиве.
require: 'ngModel',
scope: {
modelValue: "=ngModel"
},
link: function (scope, el, attrs, ctrl) {
И я использую его как:
<ui-select myDirective multiple ng-model="GroupsModel" theme="select2" ng-disabled="disabled" style="width: 300px;" hidden-text-box ">
<ui-select-match placeholder="groups">{{$item}}</ui-select-match>
<ui-select-choices repeat="color in Groups ">
{{color}}
</ui-select-choices>
</ui-select>
Мой вопрос в том, как я могу получить доступ к значению ngmodel из моей пользовательской директивы, если несколько директив нельзя использовать вместе для 1 элемента, есть ли обходной путь, который по-прежнему сохранит привязку?
Обновлено
Я не могу получить доступ к требуемому значению моделей ng в следующей функции моей директивы, если я не использую пустой scope: {},
scope.reset = function () {
var modelValue =ctrl.$viewValue;
$timeout(function () {
el[0].focus();
}, 0, false);
};
Вот моя директива:
var app = angular.module('app');
app.directive('resetField', [
'$compile', '$timeout', '$http', function ($compile, $timeout, $http) {
return {
require: 'ngModel',
link: function (scope, el, attrs, ctrl) {
// compiled reset icon template
var template = $compile('<i ng-show="enabled" ng-mousedown="reset()" class="fa fa-floppy-o" style="padding-left:5px"></i>')(scope);
el.after(template);
scope.reset = function () {
var modelValue =ctrl.$viewValue;
$timeout(function () {
el[0].focus();
}, 0, false);
};
el.bind('input', function() {
scope.enabled = !ctrl.$isEmpty(el.val());
})
.bind('focus', function() {
scope.enabled = !ctrl.$isEmpty(el.val());
scope.$apply();
})
.bind('blur', function() {
scope.enabled = false;
scope.$apply();
});
}
};
}
]);