/ / zmienna zakresu dostępu z dyrektywy według nazwy, unikając używania eval - javascript, angularjs, angularjs-scope

dostęp do zmiennej zakresu od dyrektywy według nazwy, unikając używania eval - javascript, angularjs, angularjs-scope

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 № 1

Ilekroć 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();
});
}

skrzypce


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ąć?