Jestem nowy w AngularJs i aktualnie działający przykład (skrzypce) nie czuje się dobrze. Kiedy próbujesz rozmazać pole, powinno się zwiększyć event.times
, obecnie robię to przez $apply
w linii 10, więc pytam, czy jest lepszy sposób na osiągnięcie tego? Może coś takiego var times = scope.$get(attrs.timesField);
i wtedy scope.$apply(function(){ times += 1; });
Odpowiedzi:
3 dla odpowiedzi № 1Ilekroć w dyrektywie nie jest używany zakres izolowania, a właściwość zakresu jest określana za pomocą atrybutu, a chcesz zmienić wartość tej właściwości, użyj $ parsować:
<input custom-field times-field="event.times" ng-model="event.title" type="text">
link: function (scope, element, attrs){
var model = $parse(attrs.timesField);
element.bind("blur", function(){
model.assign(scope, model(scope) + 1);
scope.$apply();
});
}
0 dla odpowiedzi nr 2
Masz rację, to nie jest właściwy sposób na zrobienie czegoś takiego. Dowiedz się $ watch () funkcja, szczególnie gdy używasz jej w dyrektywy.
0 dla odpowiedzi № 3
Nie ma potrzeby używania eval, możesz po prostu to zrobić:
scope.$apply(function(){
scope.event.times++;
});
Musisz jednak upewnić się, że obiekt zdarzenia istnieje w zasięgu przed użyciem tej dyrektywy, i nie sądzę, że dobrze jest, aby dyrektywa polegała na danych ustawianych gdzie indziej.
Co tak naprawdę próbujesz osiągnąć?