Javascript TypeScript中带有函数参数的Angular指令
我正在尝试向用TypeScript编写的指令添加一个角度函数参数,但我必须没有正确的语法。以下是我的指令的一个示例:Javascript TypeScript中带有函数参数的Angular指令,javascript,angularjs,typescript,Javascript,Angularjs,Typescript,我正在尝试向用TypeScript编写的指令添加一个角度函数参数,但我必须没有正确的语法。以下是我的指令的一个示例: export class NewUserDirective implements ng.IDirective { public restrict: string = "E"; public replace: boolean = true; public templateUrl: string = '/views/_dialogs/newUserDialog
export class NewUserDirective implements ng.IDirective {
public restrict: string = "E";
public replace: boolean = true;
public templateUrl: string = '/views/_dialogs/newUserDialog.html';
public controller = Directives.NewUserController;
public controllerAs: string = 'Ctrl';
public bindToController: boolean = true;
public scope: any = {
showDialog: '=',
saveInProgress: '=',
onSuccessCallback: '&',
onClosingCallback: '&'
};
}
下面是我的控制器的一个片段:
export class NewUserController {
static $inject = ["$scope", "$q", "UserServices"];
public showDialog: boolean;
public saveInProgress: boolean;
public onSuccessCallback: () => void;
public onClosingCallback: () => void;
....
public save(): void {
//Flag as saving
this.saveInProgress = true;
//Save the plan
this.UserServices.createUser(this.newUser).then(x => {
//When finished, hide the modal
this.showDialog = false;
//Let parent know new user is created
this.onSuccessCallback();
});
}
}
除父控制器中的函数参数外,所有功能都正常工作。我在指令实现中尝试了几种不同的语法,如下所示:
<new-user-directive on-success-callback="loadData()" ...
您有controllerAs='Ctrl'so on success callback=“Ctrl.loadData()”您有controllerAs='Ctrl'so on success callback=“Ctrl.loadData()”您是否将controllerAs用于具有loadData
方法的外部控制器?如果是这样,那么您需要像这样创建指令(假设您将外部控制器命名为“Ctrl”)。注意loadData()前面的Ctrl.
您是否对带有加载数据方法的外部控制器使用ControllerA?如果是这样,那么您需要像这样创建指令(假设您将外部控制器命名为“Ctrl”)。注意loadData()前面的Ctrl.
这些方法通过$scope传递,而不是在控制器上传递。
您应该创建一个构造函数:
constructor(private $scope, ....){
}
并从$scope调用该方法,如下所示:
this.$scope.onSuccessCallback();
这些方法通过$scope传递,而不是在控制器上。
您应该创建一个构造函数:
constructor(private $scope, ....){
}
并从$scope调用该方法,如下所示:
this.$scope.onSuccessCallback();
指令定义对象设置了bindToController:true,因此这些方法将附加到控制器。您是正确的。我错过了那个。如上所述:您确实需要像您所说的那样在html中使用控制器名称。向上投票回答指令定义对象集bindToController:true
,因此这些方法将附加到控制器。您是正确的。我错过了那个。如上所述:您确实需要像您所说的那样在html中使用控制器名称。投票表决你的答案是的,那是正确的。然而,我的答案是关于指令外部的控制器,我们不知道它的名称。我说“假设您将外部控制器命名为‘Ctrl’”。父控制器命名为“c”,这完全是我的疏忽。谢谢你指出这一点,这是一个快速修复。指令语法工作正常。是的,没错。然而,我的答案是关于指令外部的控制器,我们不知道它的名称。我说“假设您将外部控制器命名为‘Ctrl’”。父控制器命名为“c”,这完全是我的疏忽。谢谢你指出这一点,这是一个快速修复。指令语法工作正常。