angularjs - 使用 angular.element() 使用 Angular 指令插入元素的正确方法

标签 angularjs

使用 angular.element() 将元素插入 DOM 的正确方法是什么?

app.directive('validationTest', function(){
            return {
                restrict: 'A',
                replace: false,                 
                link: function(scope, element, attrs){
                    scope.call = function(){
                        console.log('Someone clicked it');
                    };

                    var newElement = angular.element('<span ng-click="call()">').text('Yo Yo');
                    element.append(newElement);
                }
            };
        });

在此代码中,我尝试在已应用指令的元素中添加一个 span 元素。我可以将此 span 元素添加为调用追加方法的父 div 的子元素。

但是,正如您在代码中看到的,ng-click 也已与此范围关联。我知道从任何 Angular 来看它都没有用,它只是用于演示目的。因此,通常情况下,单击此跨度,控制台中应打印一行。然而,这并没有发生。

我在这里缺少什么?我是否对此附加使用了错误的方法或者我的代码中有一些错误?

最佳答案

如果动态附加到 DOM 的 HTML 有指令,那么您需要在将其附加到 DOM 之前 $compile 并链接它:

 var newElement = angular.element('<span ng-click="call()">').text('Yo Yo');
 $compile(newElement)(scope);
 element.append(newElement);

另一种不易出错的方法是将 DOM 操作移至编译函数。通过在编译阶段插入新元素,新的 HTML 将在链接阶段自动链接(无需手动编译/链接):

app.directive('myDirective', function() {
     return  {
         compile: function(element, attr) {
              var newElement = angular.element('<span ng-click="call()">').text('Yo Yo');
              element.append(newElement);
              return function(scope, element, attr) {
              }
         }
     }
});

关于angularjs - 使用 angular.element() 使用 Angular 指令插入元素的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24227317/

相关文章:

javascript - AngularJS 1.2.21 forEach 与 ng-grid 不兼容?

javascript - 如何处理 $(document).foundation() 调用和 WebPack?

javascript - ng-repeat完成渲染元素后执行自定义操作

angularjs - 如何使用 ng-init 设置作用域属性?

angularjs - 更改$ location搜索以防止推送到历史记录

javascript - 调用ng-repeat内部的API函数,提示错误。已达到 10 次 $digest() 迭代。在 AngularJS 中中止

javascript - 在页面上引导多个 Angular 应用程序会导致 Controller 未定义的错误

java - CSRF - 仅在第一次登录

javascript - 由于更多的 for 循环导致性能问题

css - AngularJS 中的粘性 Bootstrap 页脚