欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Angularjs 动态添加指令并绑定事件的方法

程序员文章站 2022-09-02 16:51:32
这两天学习了angularjs 感觉指令这个地方知识点挺多的,而且很重要,所以,今天添加一点小笔记。 先说使用场景,动态生成dom元素并绑定事件,非常常见的一种场景,用j...

这两天学习了angularjs 感觉指令这个地方知识点挺多的,而且很重要,所以,今天添加一点小笔记。

先说使用场景,动态生成dom元素并绑定事件,非常常见的一种场景,用jq实现效果:

var count=0;
$("#test").on("click",function(event){
 if(event.target.tagname.tolowercase()=="input") return;
 count++;
 var html="<input type='text' class='newele' value='"+count+"'/>";
 $(this).html(html);
 $(".newele").focus();
});
$("body").on("blur",".newele",function(){
 alert($(this).val());
})

如果用angularjs应该怎么实现呢?想当然的情况是这样的:

var myapp = angular.module('myapp', []);
    myapp.controller('mainctrl', ['$scope','$compile',function($scope) {
      $scope.count = 0;
      $scope.add = function() {
       if(event.target.tagname.tolowercase()=="input")return;
        var target=$(event.target);
        $scope.count++;
        target.html("<input value='"+$scope.count+"' ng-blur='showvalue()'>" );
      }
      $scope.showvalue=function(){
        alert(event.target.value)
      }
    }])

理想很丰满,点击test的时候内容确实变成了input,但是input不能绑定任何ng事件。

var myapp = angular.module('myapp', []);
    myapp.controller('mainctrl', ['$scope','$compile',function($scope, $compile) {
      $scope.count = 0;
      $scope.add = function() {
       if(event.target.tagname.tolowercase()=="input")return;
        var target=$(event.target);
        $scope.count++;
        target.html($compile("<input value='"+$scope.count+"' ng-blur='showvalue()'>")($scope));
      }
      $scope.showvalue=function(){
        alert(event.target.value)
      }
    }])

达到目的~

这里用到了服务,官方的解释是compile可以将一个html字符串或者dom编译成模板,该模板能够与scope链接起来,也就是说直接插入一段html片段到页面中,虽然能插入进去,但是angular并没有编译,所以任何ng事件指令绑定都是无效的,通过compile能够将html片段先编译后再插入。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。