Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.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
Angularjs 将函数传递给指令_Angularjs_Typescript - Fatal编程技术网

Angularjs 将函数传递给指令

Angularjs 将函数传递给指令,angularjs,typescript,Angularjs,Typescript,这是我的指示: module app.directives { interface IDmDeleteIconController { doAction(): void; } class DmDeleteIconController implements IDmDeleteIconController { static $inject = ['$scope']; constructor(public $scope:an

这是我的指示:

module app.directives {

    interface IDmDeleteIconController {
        doAction(): void;
    }

    class DmDeleteIconController implements IDmDeleteIconController {

        static $inject = ['$scope'];
        constructor(public $scope:any) {
        }

        doAction() {
            console.log('1');
            this.$scope.dmAction();
        }
    }

    export class DmDeleteIcon implements ng.IDirective {

        templateUrl = './app/common/directives/deleteIcon/deleteIcon.html';
        controller = DmDeleteIconController;
        controllerAs = 'dmDeleteIconVm';

        scope = {
            dmAction: '&'
        };

        link = (scope: any, element: ng.IAugmentedJQuery, attrs: ng.IAttributes, ctrl: any) => {
            console.log('2');
            scope.dmAction();
        }

        static factory(): ng.IDirectiveFactory {
            const directive = () => new DmDeleteIcon();
            directive.$inject = [];
            return directive;
        }
    }

    angular.module('myApp').directive('dmDeleteIcon', DmDeleteIcon.factory());
}
在这里,我尝试使用它:

dm-delete-icon(dm-action="console.log('hello');")
当我打开页面时,我将在控制台(从
链接
函数)中获得
2
,但我不会从传递给指令的函数中获得
hello

为什么以及如何修复它

更新:

以下是指令模板:

a.item-detail-delete-icon(class="form-image-link" href="" ng-click="dmDeleteIconVm.doAction()")
以下是我的Jade编译到的HTML:

<dm-delete-icon dm-action="console.log('hello');"></dm-delete-icon>
控制器中的函数

更新3:

如果我尝试调试此代码,我将得到以下结果:


这里的问题是,您正在向指令传递一个表达式
console.log('hello')

这基本上意味着您需要将
console
对象附加到作用域,并在该对象下添加一个方法
log
。角度表达式不会自动处理全局变量(
console


只需确保传递给指令的表达式是有效的角度表达式,并且该表达式应该有效。例如,在app scope上创建一个名为
myConsoleLog
的新方法,将某些内容打印到控制台,并将指令的属性值更改为
dm action=“myConsoleLog();”

您可以将整个html标记发布到您使用的位置吗?您是指我将从Jade中获得的指令模板还是html?我已经在问题中添加了这两个选项。您没有为属性
dm action
提供函数。
console.log
不是一个函数,因此以后应该如何使用
dmAction()
调用它?我已经更新了我的问题。我以前试图传递控制器的函数,但它对我不起作用。@toskv,我发现了问题。我需要添加
。所以
dm action=“vm.foo()”
应该是
dm action=“vm.foo();”
。谢谢,我更新了我的问题。我以前试图传递控制器的函数,但它对我不起作用。我添加了调试器截图。也许找到问题会有帮助。我已经找到了问题。我需要添加
。所以
dm action=“vm.foo()”
应该是
dm action=“vm.foo();”
<dm-delete-icon dm-action="vm.foo()"></dm-delete-icon>
    foo(): void {
        console.log("hello");       
    }