gpt4 book ai didi

javascript - 强制 AngularJS 指令链接外部摘要循环

转载 作者:行者123 更新时间:2023-11-30 14:31:08 24 4
gpt4 key购买 nike

这是指 Angular 1 应用程序。

如果 DOM 在我的 Angular 应用程序的上下文之外被修改,我知道我可以使用 angular.element(document.body).scope().$apply()强制整个应用程序重新呈现,包括新注入(inject)的内容。

但是我的指令似乎从来没有链接过。

因此在下面的示例中,标记 <message></message>应该呈现 Hello World ,但是当它被手动注入(inject),然后应用摘要时,link方法似乎从未运行。

https://jsbin.com/wecevogubu/edit?html,js,console,output

JavaScript

var app = angular.module('app', [])

app.directive('message', function() {
return {
template: 'Hello, World!',
link: function() {
console.log('message link')
}
}
})

document.getElementById('button').addEventListener('click', function() {
document.getElementById('content').innerHTML = '<message>default content</message>'
var scope = window.angular.element(document.body).scope()
scope.$apply()
})

html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.min.js"></script>
</head>
<body ng-app="app">
inside app:
<message></message>

outside app:
<button id="button">Print another message</button>
<div id="content"></div>
</body>
</html>

最佳答案

根据文档,您可以使用 angular.injector 执行此操作

angular.injector allows you to inject and compile some markup after the application has been bootstrapped

因此您的示例代码可以是:

document.getElementById('button').addEventListener('click', function() {
var $directive = $('<message>default message</message>');
$('#content').append($directive);

angular.element(document.body).injector().invoke(function($compile) {
var scope = angular.element($directive).scope();
$compile($directive)(scope);
});
})

enter image description here

希望这就是您要找的!

关于javascript - 强制 AngularJS 指令链接外部摘要循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51145788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com