Sono piuttosto nuovo rispetto alle direttive Angular e sto avendo un sacco di problemi nel far questo per fare ciò che voglio. Ecco le basi di quello che ho:Direttiva AngularJs: metodo call dall'ambito padre all'interno del modello
Controller:
controller('profileCtrl', function($scope) {
$scope.editing = {
'section1': false,
'section2': false
}
$scope.updateProfile = function() {};
$scope.cancelProfile = function() {};
});
direttiva:
directive('editButton', function() {
return {
restrict: 'E',
templateUrl: 'editbutton.tpl.html',
scope: {
editModel: '=ngEdit'
}
};
});
Template (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>
Se non è chiaro, voglio che il tag <edit-button>
contenga tre pulsanti diversi, ognuno dei quali interagisce con qualsiasi proprietà di ambito passata in ng-edit
. Quando si fa clic, devono cambiare la proprietà, quindi chiamare il metodo di ambito appropriato.
Il modo in cui è ora, cliccando sui pulsanti cambia correttamente i valori di $scope.editing
, ma la updateProfile
e cancelProfile
metodi non funzionano. Potrei non essere d'accordo su come utilizzare correttamente le direttive, ma ho difficoltà a trovare un esempio online per aiutarmi a realizzare ciò che sto cercando di fare. Qualsiasi aiuto sarebbe apprezzato.
Grande, grazie. Sono propenso a usare il tuo primo esempio, poiché i due metodi saranno sempre gli stessi in tutte le direttive e ridurranno l'html estraneo. Cosa ti fa dire che il secondo modo è il "modo migliore?" –
@futurityverb, il secondo metodo è più generale. Se vuoi un'istanza della direttiva con un comportamento leggermente diverso, puoi semplicemente passare un metodo diverso che dovrebbe essere chiamato. Inoltre, se si inizia a nidificare la direttiva all'interno di altre direttive, '$ parent' potrebbe non fare più riferimento all'ambito del controller, ma a qualche altro ambito intermedio. – Jerrad
Mi ha spinto nella giusta direzione, ma cosa succede se voglio passare argomenti ai metodi usando il tuo secondo esempio? –