Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TypeScript中带有函数参数的Angular指令_Javascript_Angularjs_Typescript - Fatal编程技术网

Javascript TypeScript中带有函数参数的Angular指令

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

我正在尝试向用TypeScript编写的指令添加一个角度函数参数,但我必须没有正确的语法。以下是我的指令的一个示例:

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”,这完全是我的疏忽。谢谢你指出这一点,这是一个快速修复。指令语法工作正常。