angularjs - 动态添加 angularjs 指令

标签 angularjs

我正在尝试编写一个指令,将另一种类型的指令动态添加到 DOM 并编译它们。使用字符串模板时它似乎可以工作,但使用 templateUrl 时会失败。这是工作模板字符串的 jsfiddle:

app.directive('clicker', function($compile) {
    'use strict';

    return {
        compile: function(tElement, tAttrs) {
            var t = '<div data-pop>Pop</div>';

            return function(scope, iElement) {
                iElement.click(function() {
                    $('body').append($compile(t)(scope));
                });
            };
        }
    }
});

app.directive('pop', function() {
    'use strict';

    return {
        template: '<div>Testing template</div>'
        //templateUrl: 'partials/pop.html'
    };
});

http://jsfiddle.net/89AYX/

但是,如果交换到 templateUrl(使用包含模板字符串中确切内容的 html 文件),它只会工作一次。它确实向 DOM 添加了一个元素,但它不包含 templateUrl 内容,也不调用动态添加指令中的链接函数...

尝试添加其中两个将使 DOM 看起来像这样:

<div data-pop><!-- content of pop.html --></div>
<div data-pop></div>
<div data-pop></div>

最佳答案

添加scope.$apply()对我有用。使用 jQuery 1.9.0 和 Angular 1.0.3 进行测试。

iElement.bind('click', function() {
    $('body').append($compile(t)(scope));
    scope.$apply();  // cause a $digest cycle to run, since we're "outside" Angular
});

这个fiddle使用内联模板,但我还使用本地网络服务器进行了测试,该服务器必须执行单独的 HTTP GET 才能获取部分内容。

关于angularjs - 动态添加 angularjs 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13459705/

相关文章:

javascript - 为什么我的 Promise 链不能以这种嵌套方式工作?

angularjs - 在Angular中,如何从 Controller 内部找到 "called" Controller 的路由?

javascript - 来自指令的数据未在 ng-repeat 中显示

javascript - !Array.<string>= 是什么意思?

javascript - Web API MVC 从 ng-table 获取查询参数?

javascript - AngularJS - 模板中的指令

javascript - 使用http服务时访问xampp本地主机文件

javascript - 在 Javascript (Angular) 中读取、更改和保存文档

javascript - Angular.js 中的自定义日期过滤器可更改日期格式

javascript - 如何在 mongodb 的 angularjs 中使用变量模式