当前位置: 首页 > 知识库问答 >
问题:

角度1 - 角度.js:11655 范围错误:超出最大调用堆栈大小

穆睿才
2023-03-14

我有一个指令,它有一个对endpoint进行$超文本传输协议调用的控制器。我想获取服务器调用的结果,然后将它们显示在我的模板中。如果我的模板中有一个值,然后显式设置它,它就可以正常工作。如果我尝试将模板绑定到服务器调用,则会出现上面提到的错误。我需要使用$compile服务才能正常工作吗?

提前致谢

编译的最终结果

function mydirective(myservice,$compile) {

    return {
        restrict: 'ACE',
        scope: {
            url: '=',
            title: '=',
        },

        controllerAs: 'ctrl',
        bindToController: true,
        controller: ['$scope', function($scope) {
            myservice.init('http://jsonplaceholder.typicode.com/posts')
                .then(function(data) {
                    $scope.postRequest(data);
                });
            $scope.postRequest = function(val) {
                this.items = val;
                this.title = val[0].title;
            };
        }],
        link: function ($scope, $el, $attr  ) {

            var template = '<div class=\"test\">{{this.title}}</div>' +
                '<div class=\"tes\" ng-repeat=\"item in this.items\">'+
                '<div class=\"test1\">{{item.title}}</div>'+
                '</div>';

            var e = $compile(template)($scope);
            $el.after(e);
        }
    };
}

共有1个答案

柴星津
2023-03-14

下面是指令的重构版本。由于您使用的是控制器 As,因此可以完全删除对$scope的引用。此外,还会创建一个变量 ctrl 作为控制器的别名,以便从回调函数内部一致地访问控制器。最后,删除了链接函数,并且模板已调整为引用 ctrl 而不是此。

错误

RangeError:超出最大调用堆栈大小

是在模板中使用< code>this的结果,它指的是DOM而不是控制器,与< code>$compile结合使用,实质上是将DOM编译成它自己。

function mydirective(myservice, $compile) {

  return {
    restrict: 'ACE',
    scope: {
      url: '=',
      title: '=',
    },
    controllerAs: 'ctrl',
    bindToController: true,
    controller: function() {
      var ctrl = this; //alias reference for use inside controller callbacks
      myservice.init('http://jsonplaceholder.typicode.com/posts')
        .then(function(data) {
          ctrl.postRequest(data);
        });
      ctrl.postRequest = function(val) {
        ctrl.items = val;
        ctrl.title = val[0].title;
      };
    },
    template: '<div class=\"test\">{{ctrl.title}}</div>' +
      '<div class=\"tes\" ng-repeat=\"item in ctrl.items\">' +
      '<div class=\"test1\">{{item.title}}</div>' +
      '</div>'
  };
}
 类似资料:
  • 我刚刚开始使用角度2。所以我尝试使用Web服务从数据库显示类别。 这是我的论坛.服务.ts文件 forum.component.ts: forum.component.html: 请帮忙,先谢了

  • 我使用https://formidable.com/open-source/urql/用于从React Native中的GraphQL服务器获取数据。 该组件的实现方式如下: 运行应用程序时,查询按预期工作,我从GraphQL服务器接收数据。 但是,控制台会显示错误消息: 未处理的promise拒绝,[RangeError:超出最大调用堆栈大小。]在node_modules/core-js/内部/

  • 如果我运行此代码,我会收到错误RangeError:超出最大调用堆栈大小。但为什么呢?当我用9调用它时就发生了,斐波那契在这么小的数字下应该不是问题。

  • 索引.js Questionlist.jsx 问题.jsx Scorebox.jsx 结果. jsx

  • 我在react中工作,基本上我想做一个带工具提示的按钮,现在我正在做工具提示。我正在更改css显示属性,以使它在鼠标进入和离开时可见或不可见。但是有一个错误,我不知道该怎么办... 这是我的代码: 在控制台中,我收到了这个错误: 我找不到问题出在哪里。我知道这可能是关于调用一个函数,而这个函数又调用另一个函数。但是我在代码中看不到这样的东西,我不确定是否都是这样。谢谢帮助:)

  • 问题内容: 我正在使用Direct Web Remoting(DWR)JavaScript库文件,并且仅在Safari(台式机和iPad)中出现错误 它说 超出最大呼叫堆栈大小。 该错误的确切含义是什么,它会完全停止处理吗? 也适用于浏览器的所有修复程序(实际上在上, JS:执行超出超时 我假设是相同的调用堆栈问题) 问题答案: 这意味着在代码的某处,你正在调用一个函数,该函数又调用另一个函数,依