2014-10-31 46 views
0

我有類似如下:與NG-點擊屬性嵌套元素不工作

<div ng-click="class.divClick()"> 
    <p>Content</p> 
    <div id="target"></div> 
</div> 

------ 
divClick =() => { 
    doStuff(); 
    $("#target").append("<a href="#" ng-click="class.aClick()">Link</a>"); 
} 

aClick =() => { 
    $("#target").html(""); 
} 

點擊在div調用class.divClick(),但是點擊鏈接不會導致class.aClick ()被調用,它只會導致調用class.divClick()。當錨點存在時,我不需要div可點擊。我試圖在跟蹤一個禁用的屬性時使用ng-disabled,但是這似乎並沒有阻止div點擊發射,doStuff在點擊鏈接時運行。關於我在做什麼的任何想法都是錯誤的?

+0

您可以附加使用jQuery內容的標誌 - 它一無所知Angulars範圍。您需要使用'$ compile'來插入包含範圍事件的動態HTML。 – tymeJV 2014-11-01 00:03:26

回答

0

您需要編譯新的html。但這不是一個好方法。你不應該在Angular中操作DOM。

這是你應該喜歡的方式。 (我不知道打字稿,所以你可能需要使用「類。」而不是「$範圍。」)

<div ng-click="class.divClick()"> 
    <p>Content</p> 
    <div id="target"> 
    <a href="#" ng-click="class.aClick()" ng-if="scopeVariableBoolean">Link</a> 
    </div> 
</div> 

------ 
divClick =() => { 
    doStuff(); 
    $scope.scopeVariableBoolean = true; 
} 

aClick =() => { 
    $scope.scopeVariableBoolean = false; 
} 
0

角不拿起ng-click="class.aClick()",如果它是通過jQuery注入。

但是頂級的ng-click確實會選擇通過DOM的事件傳播模型冒泡的事件。還有一點需要注意:ng-if會創建一個新的作用域,因此不建議像在Kursad的回答中一樣將變量設置爲父作用域的子級。相反,你應該把控制該鏈接的對象可見性(如您使用的class對象)

<div ng-click="class.divClick()"> 
    <p>Content</p> 
    <div id="target" ng-if="class.visible"> 
    <a href="#" ng-click="class.aClick(); $event.stopPropagation()">Link</a> 
    </div> 
</div> 

------ 
divClick =() => { 
    doStuff(); 
    $scope.class.visible = true; 
} 

aClick =() => { 
    $scope.class.visible = false; 
}