当前位置: 首页 > 面试题库 >

在angular +打字稿中使用templateRequest($ templateRequest不是函数)

余信然
2023-03-14
问题内容

我正在建立一个指令,该指令应该将html文件放入dom并使用angular的compile进行编译

我收到一个错误:

$ templateRequest不是函数

显然我做错了,不知道是什么,

这是我的指令:

module Uni.Directives {

    export class uniTable implements ng.IDirective {

        public restrict: string = 'EA';

        public link: Function = (scope: ng.IScope,
            $templateRequest: ng.ITemplateRequestService,
            $compile: ng.ICompileService,
            element: ng.IAugmentedJQuery,
            attrs: ng.IAttributes) => {

           $templateRequest("template.html",false).then(function (html) {
                var template = angular.element(html);
                element.append(template);
                $compile(template)(scope);
            });
        }
    }

    angular
        .module('TModule')
        .directive('uniTable', [() => { return new Uni.Directives.uniTable() }]);


    // ******** End adding to module **********

}

问题答案:

link-function
的第二个参数是element。如果您要注入$templateRequest,则$compile需要在构造函数中进行注入:

export class uniTable implements ng.IDirective {
    constructor(private $templateRequest: ng.ITemplateRequestService, private $compile: ng.ICompileService){

    }
    public restrict: string = 'EA';


    public link: Function = (scope: ng.IScope,
        element: ng.IAugmentedJQuery,
        attrs: ng.IAttributes) => {

       this.$templateRequest("template.html",false).then(function (html) {
            var template = angular.element(html);
            element.append(template);
            $compile(template)(scope);
        });
    }
}

angular
    .module('TModule')
    .directive('uniTable', ['$templateRequest','$compile',($templateRequest,$compile) => { return new Uni.Directives.uniTable($templateRequest,$compile) }]);

我建议在处理诸如指令功能之类的工厂功能时使用功能。下面这个结构:

function uniTable($templateRequest: ng.ITemplateRequestService, $compile: ng.ICompileService): ng.IDirective{
   return {
      restrict: 'EA',
      link: function(){
        $templateRequest()//doStuff
      }
   };
}
uniTable.$inject = ['$templateRequest', '$compile'];
angular.module('TModule')
.directive('uniTable', uniTable );


 类似资料:
  • 我正在处理打字稿,并将一个函数传递给另一个函数。 如果我有一个传递到typescript中另一个函数的函数,我应该如何编写类型? 我尝试了,但似乎不起作用。

  • 问题内容: 我正在尝试学习打字稿和angularjs(因此我是JavaScript的菜鸟) 通过angularjs教程,我看到他们做了这样的事情: 在普通的javascript中: 更重要的是,这些参数可以按任何顺序排列(或根本不按顺序排列),而Project实际上是用户定义的变量/类型。angularjs框架能够将参数映射到实际对象。 那么现在到Typescript,我该如何重新创建这种类型的功

  • 我正在努力寻找 有什么不同?

  • 有一个在角度和打字稿中使用的setTimeout示例: 在编译时,我得到了以下信息: 错误TS2322:类型“Timeout”不能分配给类型“number”。 我如何在typescript中使用setTimeout?

  • 我已经在我的.html文件中定义了这些: 然后在test.js: 但Typescript错误地指出:“找不到名称‘树’” 我也尝试编译与和放置在test.js文件的顶部,但它再次出错: