ng-click 未触发,深入内部 ui-views
ng-click not firing, deep inside ui-views
我正在使用 AngularJS 和 ui-路由器。我有一个子菜单,当他们单击他们的用户名时会打开,在其中我想要一个注销按钮。这是一个带有 ng-click 的 div 应该注销用户;但是,ng-click 永远不会触发。
这只是 shows/hides 子菜单
<div class="user-view-content" ng-init="showSubMenu = false" ng-click="showSubMenu = !showSubMenu">
{{getUsername()}}
<span class="glyphicon glyphicon-chevron-down"></span>
</div>
而子菜单的内容 - ng-click 失败!
<div class="user-sub-menu" ng-show="showSubMenu">
<div ng-click="logout()">Logout</div>
</div>
奇怪的是,如果我把它放在子菜单之外,它就可以正常工作。 ng-点击成功
<div ng-click="logout()">Logout</div>
和用户子菜单的 css,唯一不同的是
.user-sub-menu {
position: fixed;
border-radius: 6px;
border: solid 1px #f3fcff;
padding: 1em;
top: 51px;
right: 4px;
}
所有这些标记都包含在 <div ui-view="user" class="user-view"></div>
内,<div ui-view="user" class="user-view"></div>
本身嵌套在各种 ui 视图中约 5-6 divs 深。这是我第一次也是唯一一次在他的应用程序中遇到 ng-click 没有在应该触发的时候触发。由于涉及的复杂性,我无法在 jsfiddle 中重现。
- 为什么我的 ng-click 没有触发?
更新 1
正如 iH8 在下面建议的那样,认为这可能是一个孤立的范围问题(这没有任何意义,但无论如何都试过了)。下面的代码不会触发,也不会将 {{testVal}} 更改为 'after'。它始终保持 'before'。
<div class="user-sub-menu" ng-show="showSubMenu" ng-init="testVal='before'">
<div ng-click="testVal='after'">Logout</div>
{{testVal}}
</div>
如果没有触发,那是因为 ng-click
指令在当前范围内找不到 logout
方法。这意味着它嵌套在创建隔离范围的指令中。通常,作用域原型继承自其父级。一个孤立的范围没有。所以它不能访问祖先的任何属性或方法,因为它没有。
已修复。我不得不在子菜单的 css 中添加 z-index 1。原来它在另一个项目后面...
z-index: 1;
我正在使用 AngularJS 和 ui-路由器。我有一个子菜单,当他们单击他们的用户名时会打开,在其中我想要一个注销按钮。这是一个带有 ng-click 的 div 应该注销用户;但是,ng-click 永远不会触发。
这只是 shows/hides 子菜单
<div class="user-view-content" ng-init="showSubMenu = false" ng-click="showSubMenu = !showSubMenu">
{{getUsername()}}
<span class="glyphicon glyphicon-chevron-down"></span>
</div>
而子菜单的内容 - ng-click 失败!
<div class="user-sub-menu" ng-show="showSubMenu">
<div ng-click="logout()">Logout</div>
</div>
奇怪的是,如果我把它放在子菜单之外,它就可以正常工作。 ng-点击成功
<div ng-click="logout()">Logout</div>
和用户子菜单的 css,唯一不同的是
.user-sub-menu {
position: fixed;
border-radius: 6px;
border: solid 1px #f3fcff;
padding: 1em;
top: 51px;
right: 4px;
}
所有这些标记都包含在 <div ui-view="user" class="user-view"></div>
内,<div ui-view="user" class="user-view"></div>
本身嵌套在各种 ui 视图中约 5-6 divs 深。这是我第一次也是唯一一次在他的应用程序中遇到 ng-click 没有在应该触发的时候触发。由于涉及的复杂性,我无法在 jsfiddle 中重现。
- 为什么我的 ng-click 没有触发?
更新 1
正如 iH8 在下面建议的那样,认为这可能是一个孤立的范围问题(这没有任何意义,但无论如何都试过了)。下面的代码不会触发,也不会将 {{testVal}} 更改为 'after'。它始终保持 'before'。
<div class="user-sub-menu" ng-show="showSubMenu" ng-init="testVal='before'">
<div ng-click="testVal='after'">Logout</div>
{{testVal}}
</div>
如果没有触发,那是因为 ng-click
指令在当前范围内找不到 logout
方法。这意味着它嵌套在创建隔离范围的指令中。通常,作用域原型继承自其父级。一个孤立的范围没有。所以它不能访问祖先的任何属性或方法,因为它没有。
已修复。我不得不在子菜单的 css 中添加 z-index 1。原来它在另一个项目后面...
z-index: 1;