2014-10-31 51 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; 
}