Naudojant AngularJS, jei nustatysiu paprastą įvesties teksto langelio reikšmę, pavyzdžiui, "bob" žemiau. reikšmė nerodoma, jei pridedamas atributas ng-model
.
<input type="text"
id="rootFolder"
ng-model="rootFolders"
disabled="disabled"
value="Bob"
size="40"/>
Ar kas nors žino paprastą būdą, kaip apeiti šią įvestį ir išlaikyti ng-model
? Bandžiau naudoti ng-bind
su numatytąja reikšme, bet atrodo, kad tai taip pat neveikia.
Vojta aprašė "Angular būdą", bet jei jums tikrai reikia, kad tai veiktų, @urbanek neseniai paskelbė apeiti naudojant ng-init:
<input type="text" ng-model="rootFolders" ng-init="rootFolders='Bob'" value="Bob">
https://groups.google.com/d/msg/angular/Hn3eztNHFXw/wk3HyOl9fhcJ
Atnaujinimas: Mano pirminis atsakymas buvo susijęs su tuo, kad valdiklyje turi būti DOM suprantamas kodas, o tai pažeidžia "Angular" konvencijas, kurios palankios HTML. @dmackerman mano atsakymo komentare paminėjo direktyvas, o aš iki šiol to visiškai nepastebėjau. Atsižvelgdamas į tai, pateikiu teisingą būdą, kaip tai padaryti nepažeidžiant nei "Angular", nei HTML konvencijų:
Taip pat yra ir vienas, ir kitas būdas - paimkite elemento vertę ir naudokite ją modeliui atnaujinti direktyvoje:
<div ng-controller="Main">
<input type="text" id="rootFolder" ng-model="rootFolders" disabled="disabled" value="Bob" size="40" />
</div>
ir tada:
app.directive('input', ['$parse', function ($parse) {
return {
restrict: 'E',
require: '?ngModel',
link: function (scope, element, attrs) {
if(attrs.value) {
$parse(attrs.ngModel).assign(scope, attrs.value);
}
}
};
}]);
Žinoma, galite modifikuoti pirmiau pateiktą direktyvą, kad prieš nustatydami modelio reikšmę galėtumėte atlikti daugiau veiksmų su atributu value
, įskaitant $parse(attrs.value, scope)
, kad atributas value
būtų traktuojamas kaip "Angular" išraiška (nors aš asmeniškai tam tikriausiai naudočiau kitą [custom] atributą, kad standartiniai HTML atributai būtų nuosekliai traktuojami kaip konstantos).
Be to, panašus klausimas yra https://stackoverflow.com/questions/14489547, kuris taip pat gali būti įdomus.