Angular - 将引导模块重新添加到 DOM

Angular - Re-add a bootstraped module to DOM

我遇到了一个有趣的问题。

我正在开发一个带有内容脚本的 Chrome 扩展。

此扩展旨在向页面添加一点 div,此 div 使用 AngularJS。 (我选择 Angular 是因为我希望这个 div 的数据可以通过更改 var 值轻松更新)。

我可以添加一次 div 和 bootstrap。所以 div 的行为很好。

但是主页(我无法控制)经常使用 Ajax 重新加载所有内容。 (然后我完全无法 - 我认为 - 从某些被删除的元素中获取事件)。

我能够创建方法来检查我的元素是否仍在页面上,如果没有,则会再次添加它们。 appendChildPersistent 方法会处理它。 (它等待某个元素出现在主页上。将我的元素添加到其中。添加时运行回调。继续检查该元素是否仍然存在,如果不存在,则重复整个过程)。

所以我所有的普通元素都能完美地工作。

但是这个 angular div 不能 bootstrap 第二次编辑。

程序:

代码:

var txt = '<div id="myDivId" ng-controller="myController">{{testing}}</div>';

appendChildPersistent('myDivId', MyDiv, '#theTargetMainPageDiv', function()
{
        var app = angular.module('myApp', [])
            .controller('myController', function($scope) {
                $scope.testing = 'Welcome!';
            });

        angular.bootstrap(document, ['myApp']);
});

所以,第一次添加我的 div 时,它起作用了。 angular 变量和指令有效(在本例中,div 显示 "Welcome!")。但是第二次,我收到 "already bootstrapped" 错误。 (但如果我不再尝试 bootstrap,div 将变成纯文本,没有 angular 行为,显示“{{testing}}”而不是 "Welcome!") .

有没有办法解除、重做 bootstrap 或其他我可以解决这个问题的方法?

您的申请只关注您插入的div。您可以在页面的特定区域制作 Angular 应用程序 运行,而不是覆盖整个文档。只需将 DOM 元素传递给 bootstrap 函数:

angular.bootstrap(myDiv, ['myApp']);

这样 Angular 在您的 div 中只有 运行 并且您可以在每次添加新的 div 时 bootstrap 应用程序。