Jestem całkiem nowy w dyrektywach Angular i mam wiele problemów z uzyskaniem tego, co chcę. Oto podstawy, co mam:Dyrektywa AngularJs: metoda wywołania z zakresu nadrzędnego w szablonie
Kontroler:
controller('profileCtrl', function($scope) {
$scope.editing = {
'section1': false,
'section2': false
}
$scope.updateProfile = function() {};
$scope.cancelProfile = function() {};
});
dyrektywa:
directive('editButton', function() {
return {
restrict: 'E',
templateUrl: 'editbutton.tpl.html',
scope: {
editModel: '=ngEdit'
}
};
});
szablonu (editbutton.tpl.html):
<button
ng-show="!editModel"
ng-click="editModel=true"></button>
<button
ng-show="editModel"
ng-click="updateProfile(); editModel=false"></button>
<button
ng-show="editModel"
ng-click="cancelProfile(); editModel=false"></button>
HTML:
<edit-button ng-edit="editing.section1"></edit-button>
Jeśli nie jest jasne, chcę, aby znacznik <edit-button>
zawierał trzy różne przyciski, z których każdy wchodzący w interakcje z dowolną właściwością zakresu został przekazany do ng-edit
. Po kliknięciu powinni zmienić tę właściwość, a następnie wywołać odpowiednią metodę zasięgu.
Sposób, w jaki jest teraz, kliknięcie przycisków prawidłowo zmienia wartości $scope.editing
, ale metody updateProfile
i cancelProfile
nie działają. Mogę być daleko od tego, jak właściwie używać dyrektyw, ale mam problem ze znalezieniem przykładu online, aby pomóc mi osiągnąć to, co próbuję zrobić. Każda pomoc będzie doceniona.
Świetnie, dzięki. Jestem skłonny użyć twojego pierwszego przykładu, ponieważ obie metody będą zawsze takie same dla różnych dyrektyw i zmniejszą obce treści HTML. Co sprawia, że mówisz, że druga droga to "lepszy sposób?" –
@futurityverb, Druga metoda jest bardziej ogólna. Jeśli chcesz mieć instancję dyrektywy o nieco innym zachowaniu, możesz po prostu przekazać inną metodę, która powinna zostać wywołana. Ponadto, jeśli zaczniesz zagnieżdżać dyrektywę w innych dyrektywach, '$ parent' może już nie odwoływać się do zakresu kontrolera, ale do innego zakresu pośredniczącego. – Jerrad
Pchnął mnie we właściwym kierunku, ale co jeśli chcę przekazać argumenty do metod za pomocą twojego drugiego przykładu? –