Zbudowałem kilka rozszerzeń wejść i najlepszym (prawdopodobnie) jedynym sposobem rozszerzenia istniejących powiązań ngModel jest użycie ngModelController w twojej dyrektywie. Możesz wymagać innego kontrolera dyrektywy za pomocą właściwości "wymagaj". To pozwoli ci uzyskać/ustawić wartości modelu, a także rozszerzyć lub zastąpić zachowanie sprawdzania poprawności w razie potrzeby. Ponieważ prawdopodobnie rozszerzasz już dostępne dyrektywy wejściowe AngularJS, prawdopodobnie będziesz chciał spojrzeć na dyrektywy wejściowe wewnątrz AngularJS, aby zobaczyć przykłady tego działania. Mogą również pracować w stycznej z ngFormController jako rodzic dla całego formularza. Zabrało mi to trochę czasu, więc bądź cierpliwy, ale jest to zdecydowanie najlepszy sposób na zrobienie tego.
Chciałbym omijać tutaj zakresy izolatów, mogą one być trudne, nie zawsze dobrze współpracują z innymi dyrektywami (więc zazwyczaj używa się go tylko w nowych elementach lub rzeczach, w których tylko jedna dyrektywa będzie istnieć samodzielnie). Chciałbym zaprojektować coś takiego:
return {
restrict: 'E',
template: tpl,
replace: true,
require: 'ngModel',
link: function(scope, element, attrs, ngModelController) {
// Use attrs to access values for attributes you have set on the lement
// Use ngModelController to access the model value and add validation, parsing and formatting
// If you have an attribute that takes an expression you can use the attrs value along with $scope.$watch to check for changes and evaluate it or the $parse service if you just want to evaluate it.
}
I polecam się jako znajomy, jak można z dyrektywą projektowania jak wejść niestandardowych można uzyskać bardzo skomplikowane zależności od tego, co robią (zbudowaliśmy własne wejścia, które dodają przycisków +/- jako a także takie, które formatują liczby jako procenty, waluty lub po prostu liczby z przecinkami podczas wpisywania). Oprócz docs ngModelController te są przydatne do przeglądu:
Możesz użyć 'ng-required' zamiast i' ngRequired' w swoim zakresie dyrektywy. – jpmorin
Można również sprawdzić, co jest wewnątrz atrybutu 'attrs.required 'w funkcji łącza i sprawdzić, czy coś jest. – jpmorin
Czy jest jakiś powód, dla którego potrzebujesz zakresu izolacji? Może wydawać się prostsze, ale często nie jest. Proponuję inne podejście, biorąc pod uwagę "ngModelController" i używając "attrs" i $ scope. $ Obejrzyj, jeśli potrzebujesz dynamicznego wiązania. Daj mi znać, jeśli chcesz bardziej kompletne rozwiązanie, jeśli napiszesz jsFiddle lub coś, spróbuję pomóc. –