私は、エンドポイントへの$ http呼び出しでコントローラを持つ指令を持っています。そのサーバーコールの結果を受け取り、それらをテンプレートに表示したいと思います。テンプレート内に単一の値があり、それを明示的に設定すると、すべて正常に動作します。テンプレートをサーバーコールにバインドしようとすると、上記のエラーが発生します。これを行うには$ compileサービスを使用する必要がありますか?事前にangular1 - angular.js:11655 RangeError:最大呼び出しスタックサイズを超えました
おかげ
は、コンパイルここ
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);
}
};
}
この投稿は、そのエラーの意味を教えてくれます。http://stackoverflow.com/questions/22123769/rangeerror-maximum-call-stack-size-exceeded-why。しかし、この例ではコンパイルする必要はありません。あなたがコンパイルするかもしれない例は、あなたがいくつかのテンプレートを返すGET要求をしたと言うことです。そして、それを手動でコンパイルする必要があります。 – terpinmd
私は結果を配列にプッシュする必要があります。どのように値を表示するために手動でコンパイルするのですか? – Jimi
あなたは '$ scope'と' controllerAs'を同じディレクティブで混在させています。これは一般的に混乱の原因になります。特に、 '$ scope.postRequest'関数内の' this'オブジェクトはコントローラへの参照ではありません。また、あなたのテンプレートでは、 'this'の代わりに' ctrl'を使うべきです。 – Claies