Niedawno podjęłam Angular jako ćwiczenie edukacyjne.Kąt: dostarczanie metod do modelu ng
Chciałbym przekazać metodę do ng-model
lub wyrażenie, które może go ocenić.
W tym skrzypcach http://jsfiddle.net/C4aGk/ zobaczysz, że ciężko zakodowałem to pole jako ng-model="record.inner[0].text"
i działa, teraz chodzi o to, chciałbym zastąpić zakodowane zero czymś, co jest zwracane w czas wybrany według kryterium: id = 1
.
Mój kod HTML:
<div ng-controller="MainController" ng-app>
<div ng-repeat="record in records">
<input ng-model="record.inner[0].text"> <span>{{record.outer}}</span>
<div ng-repeat="nested in record.inner">{{nested.id}} - {{nested.text}}</div>
<hr />
</div>
</div>
<br/>
i odpowiadające im JS:
function MainController($scope) {
$scope.records = [{
outer: "Hello",
inner: [{
id: 1,
text: "Angular"
}, {
id: 2,
text: "jQuery"
}]
}, {
outer: "World",
inner: [{
id: 1,
text: "Node.js"
}, {
id: 2,
text: "Underscore.js"
}]
}];
$scope.getText = function (record) {
var index = 0;
for (nested in record.inner) {
if (nested.id === 1) {
return "record.inner[" + index + "].text";
}
index++;
}
};
Próbowałem umieszczenie ng-model="getText(record)"
zgodnie https://groups.google.com/forum/#!topic/angular/Pef6LY2rT7g bez powodzenia, a inna wyszukiwarka pojawił się ten, który jest równie https://github.com/angular/angular.js/pull/1328 nieprzydatny dla mnie.
Każda pomoc będzie bardzo ceniona.
Masz błąd w funkcji 'getText'. Pętle 'for/in' nie działają w JavaScript. Musisz zmienić instrukcję if na 'if (record.inner [nested] .id === 1) {'. Tak czy inaczej, to nie rozwiąże całego twojego problemu. Lepiej może opisać, co próbujesz zrobić, a nie jak próbujesz to zrobić. Na przykład, jeśli po prostu chcesz zezwolić użytkownikowi na edycję [0] lub [1] po kliknięciu przycisku Edytuj, w Angularu byłoby lepiej/łatwiej mieć oddzielne pola, które pokazujesz/ukrywasz. – Langdon
Dziękuję @Langdon za złapanie błędu, zwykle unikam pętli 'for/in', więc jestem trochę zardzewiały. Postępuję zgodnie z przewodnikiem Dan Wahlin dla Angular JS i próbowałem przerobić aplikację klienta wymienioną w prezentacji, kiedy przyszło mi do głowy, aby spróbować i dlatego, że powinna działać zgodnie z linkami, które cytowałem. Myślałem, że to musi być coś, co robię źle. Po prostu analizuję dyrektywy w tej chwili, stąd pochodzi to pytanie. :) – adeelx