Ecco un esempio TypeScript di come chiamare indietro un metodo sul controller da una direttiva incorporata. La cosa più importante da notare è che il nome del parametro della direttiva per la callback utilizza uno & quando definito, e quando si chiama quel callback non si devono usare parametri posizionali ma si usa invece un oggetto con proprietà che hanno i nomi dei parametri nella destinazione.
Registrati direttiva quando si crea il modulo app:
module MyApp {
var app: angular.IModule = angular.module("MyApp");
MyApp.Directives.FileUploader.register(app);
}
Il codice di registrazione è il seguente:
Il controllore della direttiva sarebbe simile a questa
module MyApp.Directives.FileUploader {
export class Controller {
public files: string[] = ["One", "Two", "Three"];
//The callback specified in the view that created this directive instance
public onFileItemClicked: (fileItem) => void;
// This is the controller method called from its HTML's ng-click
public fileItemClicked(fileItem) {
//IMPORTANT: Don't use comma separated parameters,
//instead use an object with property names to act as named parameters
this.onFileItemClicked({
fileItem: fileItem
});
}
}
}
Il l'HTML della direttiva sarebbe simile a questo
<ul>
<li ng-repeat="item in controller.files" ng-click="controller.fileItemClicked (item)">
{{ item }}
</li>
</ul>
La vista principale avrà un'istanza della direttiva in questo modo
<body ng-app="MyApp" ng-controller="MainController as controller">
<file-uploader on-file-item-clicked="controller.fileItemClicked(fileItem)"/>
</body>
Ora tutto ciò che serve sul tuo MainController è un metodo
public fileItemClicked(fileItem) {
alert("Clicked " + fileItem);
}
fonte
2016-02-01 12:25:32
si fa a hanno isolato la portata della direttiva di usare Ambito principale del controllore –