1. 程式人生 > >AngularJS中,如何給動態生成的元素繫結事件

AngularJS中,如何給動態生成的元素繫結事件

1 . 我們知道在jquery中,動態生成一個元素,如果要在動態生成元素的同時,動態繫結事件,可以通過live/on方法(在jquery3.0中已經廢除了bind方法)。
2 . 在angularjs中,操作DOM一般在指令中完成,事件監聽機制是在對於已經靜態生成的dom繫結事件,而如果在指令中動態生成了DOM節點,動態生成的節點不會被JS事件監聽。

舉例來說:

angular.module('myapp',[])
.directive('myText',function(){
    return{
        restrict:'A',
        template:'<div ng-click="hello()">Hi everyone</div>'
, link:function(scope,ele,attr){ } } })

這個指令中,會生成新的DOM節點:

<div ng-click="hello()">Hi everyone</div>

但是如果不做處理,這裡的ng-click事件並不能實現,因為事件的監聽在靜態html頁面生成時候已經完成。那麼如何給動態生成的元素,繫結事件,實現事件的動態監聽呢?

3 . 通過$compile服務,編譯DOM,實現動態的事件繫結

var template:'<div ng-click="hello()">Hi everyone</div>'
, var content = $compile(template)(scope);

通過這兩句,首先先編譯DOM,然後用編譯後的DOM加入到之前的靜態節點中,就能實現動態繫結事件,之類注意,應該注入$compile service

.directive('myText',function($compile){})

完整的程式碼如下:

angular.module('myapp',[])
.directive('myText',function($compile){
    var template:'<div ng-click="hello()">Hi everyone</div>'
, return{ restrict:'A', link:function(scope,ele,attr){ ele.on("click", function() { scope.$apply(function() { var content = $compile(template)(scope); element.append(content); }) }); } } })

相關推薦

動態動態生成元素事件不生效解決方法

JQ動態生成的元素,無法繫結事件,查詢到的原因是:繫結事件的元素必須是構造頁面時已經存在的,假如構造元素是不存在,是後動態生成,則繫結不了,解決方法,通過on()繫結舉例:$("body").on("c

jquery html 動態新增元素事件

由於實際的需要,有時需要往網頁中動態的插入HTML內容,並在插入的節點中繫結事件處理函式。我們知道,用Javascript向HTML文件中 插入內容,有兩種方法, 一種是在寫HTML程式碼寫入JS,然後插入到文件中; 另外一種是通過ajax的方式,從伺服器獲取資料,然

easyUI 導航欄動態生成事件不相應

            一個困擾兩天的問題。demo取的是easyUI官網上的例子。            最近在接觸easyUI輕量級框架的時候,看到一個模板款式蠻好看的。          一個標準的 分為North ,south,west以及center 在生成導

微信小程式關於navigator子元素事件阻止navigator跳轉

第二個item裡邊,switch切換時,會自動觸發navigator跳轉,找了好久也沒有找到類似於e.preventDefault方法,想了一個辦法, 如圖,第一個item,那就是,把switch拿出來,和navigator為兄弟元素,然後把switch定位,點選時,

關於動態生成dom事件失效的原因及解決和live()

在測試給動態生成的dom繫結事件的時候發現事件失效,於是就測試了一下: 1. 事件失效的原因: (1)bind事件繫結只對dom中存在的元素有效,對於我們後來動態增加的元素是監測不到,所以繫結不了 (2)同樣,當你使用var aa = document.getElemen

AngularJS如何動態生成元素事件

1 . 我們知道在jquery中,動態生成一個元素,如果要在動態生成元素的同時,動態繫結事件,可以通過live/on方法(在jquery3.0中已經廢除了bind方法)。 2 . 在angularjs中,操作DOM一般在指令中完成,事件監聽機制是在對於已經靜態

利用jquery動態載入的元素事件

工作中經常會遇見利用ajax載入dom元素,這樣就不能給動態載入的元素繫結時間 此時可以利用jquery的on方法解決(老版本使用live方法) $(document).on("click",".edit-btn",function(){             aler

jQuery一個元素事件一次點選會多次觸發的問題所在

如果在給一個元素繫結事件後,再次繫結事件就會出現多次繫結的情況,此時就會出現多次觸發,解決方法我採用的是,在繫結事件前進行解綁,bind繫結的時間用ubbind解綁,其他繫結方法用對應的解綁方法解綁。

微信小程式 js動態前臺元素事件

//js動態給前臺繫結事件 var myList = ["items1","items2","items3"] pageObject = { data:{ actionSheet

Jquery動態新增的元素事件:live() delegate() on()

給已存在的元素繫結事件時可以直接寫: $(".class a").click(function(){ }) 但是對於動態生成並append()到頁面上的元素來說,就不能直接用上面的方法來繫結事件了。 在Jquery 1.7之前我們可以通過live()和delega

迴圈元素事件

for(var i=0; i<10; i++){ $('#pages_div_' + i).bind('click', {index : i}, clickHandler); } function clickHandler(event){ $(

jquery 動態生成click事件獲取同行資料

這個問題糾結了好久,動態生成的表格,直接按照普通方式,onclick=“afun();”  無法在function內獲取到正確的this,就無法獲取表格其他項資料。繫結也無法成功,直接沒反應。 後來debug了一下,感覺jquery繫結事件實在載入前進行的,此時還沒有動態生

asp.net動態生成控制元件併為控制元件事件

1.動態查詢控制元件的例子:         //查詢控制元件         Image img = (Image)Page.FindControl("Image1");         //設定圖片資源         img.ImageUrl = "~/image/p

jQuery動態新增的元素事件

  今天在做專案是時候發現動態新增的元素不能繫結事件,由於本人js和jquery技術有限,所以也不知道原因,一查才知道,動態新增的元素繫結事件就會失效,所以修改了一下。 jquery中繫結事件一般使用bind,或者click,但是這隻能是對已經載入好的元素定義事件,那些後來新增插入

iframe js獲取父級元素資訊設定css樣式 和事件

獲取iframe 父級id 為objid的內容。 $('#objid',window.parent.document).val(""); 初始化為iframe 父級 id為cancel1繫結事件 $('#cancel1',window.parent.document).

JS實現迴圈元素事件的幾個常用方法

作為一個JS的初學者,想對一些元素迴圈繫結事件的時候總是出現各種問題,尤其是在對閉包沒有熟練掌握的時候更是一頭霧水。網上一查,果然好多初學者有這個困惑,既然這個問題總是出現,於是在我就總結了以下兩個比較好理解的解決方案,分享給大家:(可能還有更好的方式我沒有發現,請各位前輩

從零開始學 Web 之 jQuery(五)操作元素其他屬性元素事件

一、操作元素的寬和高 1、方法一 元素.css("width"); 元素.css("height"); 最後得到的是字串型別的,比如 200px。 如果我們在設定為原來寬高2倍的時候,就要先把獲取的寬高轉換成數字型別,再乘以2,這樣操作比較麻煩,有沒有簡單的方法呢? 2、方法二 元素.width(屬性

jQuery-為動態新增的元素事件(以及不重複新增新的內容)

在使用jQuery的方式為元素繫結事件時,我經常使用bind或者click,但這隻能為頁面已經載入好的元素繫結事件。像需要用ajax的方式請求遠端資料來動態新增頁面元素時,顯然以上幾種繫結事件的方式是無效的 $(selector).bind(event,d

jquery html動態新增的元素事件

在實際開發中會遇到要給動態生成的html元素繫結觸發事件的情況: <div id="testdiv">    <ul></ul> </div> 假設我們要給ul動態新增的<li>繫結click事件形成如下結果 &

關於js動態渲染的元素事件遇到的坑

總結一下今天專案中遇到的關於動態渲染元素繫結事件遇到的一些坑。 首先作為後臺管理系統除左邊側邊欄外,右邊主體部分都是動態渲染出來的。 第一:在給右側主體裡面元素繫結事件的時候,不要直接on繫結,而是用父元素代理事件來繫結,直接on是綁不上去的。 第二:因為是動態渲染的元素