如何在插入 DOM (angularjs) 时重新编译指令
How to recompile a directive upon inserting into DOM (angularjs)
好的,所以我创建了一个指令让我们说
<calendar></calendar>
它按照我的预期进行了渲染,所以一切正常。现在,我的问题是插入 DOM 时如何(重新)渲染它?我不想一直在我的页面上使用它,我只想动态添加它并在需要时呈现它(它是模块的一部分),比方说,理想情况下我希望它看起来像
$("body").append("<calendar></calendar>")
如何使用 angularjs 实现此目的?
操作顺序是这样的:
创建DOM元素或angular.element
对象:
var calendar = angular.element('<calendar></calendar>'),
将其传递给 $compile
服务。在这个阶段你需要提供必要的范围对象:
$compile(calendar)(scope);
将 calendar
元素附加到文档:
angular.element('body').append(calendar);
所以所有内容看起来像:
var calendar = angular.element('<calendar></calendar>');
$compile(calendar)(scope);
angular.element('body').append(calendar);
您可以使用 $compile 服务重新编译它并使用 angular.element('body').append 将它再次附加到页面。例如:
var el = $compile( "<calendar></calendar>" )( $scope );
angular.element('body').append( el );
可以用angular元素来实现:
angular.element('body').append($compile("<calendar></calendar>")($scope));
你需要在下面两行代码中将你的指令元素注入DOM,不要忘记在你使用它的地方添加$document
& $compile
依赖。
var template = '<calender></calender>',
body = $document.find('body');
body.append($compile(template)(scope));
好的,所以我创建了一个指令让我们说
<calendar></calendar>
它按照我的预期进行了渲染,所以一切正常。现在,我的问题是插入 DOM 时如何(重新)渲染它?我不想一直在我的页面上使用它,我只想动态添加它并在需要时呈现它(它是模块的一部分),比方说,理想情况下我希望它看起来像
$("body").append("<calendar></calendar>")
如何使用 angularjs 实现此目的?
操作顺序是这样的:
创建DOM元素或
angular.element
对象:var calendar = angular.element('<calendar></calendar>'),
将其传递给
$compile
服务。在这个阶段你需要提供必要的范围对象:$compile(calendar)(scope);
将
calendar
元素附加到文档:angular.element('body').append(calendar);
所以所有内容看起来像:
var calendar = angular.element('<calendar></calendar>');
$compile(calendar)(scope);
angular.element('body').append(calendar);
您可以使用 $compile 服务重新编译它并使用 angular.element('body').append 将它再次附加到页面。例如:
var el = $compile( "<calendar></calendar>" )( $scope );
angular.element('body').append( el );
可以用angular元素来实现:
angular.element('body').append($compile("<calendar></calendar>")($scope));
你需要在下面两行代码中将你的指令元素注入DOM,不要忘记在你使用它的地方添加$document
& $compile
依赖。
var template = '<calender></calender>',
body = $document.find('body');
body.append($compile(template)(scope));