Angular 子 ng-click 事件不会在父 ng-click 事件之后触发
Angular child ng-click event does not fire after parent ng-click event
我对 Angular 还很陌生,所以我还没有弄清楚它的所有小怪癖。目前我有一个用 ng-click="open()" 打开覆盖的按钮。在叠加层内还有另一个按钮,可以使用 ng-click="close()" 关闭叠加层。
就目前而言,如果另一个出现在视图中,则不会触发 ng-click 事件。如果 ng-click="open()" 存在, ng-click="close()" 将不会触发,反之亦然。
这是我正在谈论的一个更简单的版本,因为我正在做的事情在实际应用程序上有点繁重:
查看
<button ng-click="open()">Open</button>
<div id="overlay">
<button ng-click="close()">Close</button>
</div>
控制器
$scope.open = function(){
//some move.js to open the overlay
}
$scope.close = function(){
//some move.js to close the overlay
}
叠加层不是动态生成的,而是呈现给页面加载。
下面是@sz tech 提供的解决方案。不是 $compile 方法。 http://codepen.io/NicholasByDesign/pen/WwqMXa?editors=1010
只是一种旁注,因为我认为这不会有什么不同。我在 nodejs 和 jade 环境中工作。我把它作为常规 HTML 并省略了包装 open/close 函数的控制器代码以简化事情。
问题是您正在更新 (div.innerHTML += "close";
) 包含 angular 代码 (ng-click="close()"
) 的 div 并且绑定将消失,请尝试重新编译更新后的 div 即可。试试这个代码:
var app = angular.module('myApp', []);
app.controller('appCtrl', function($scope,$compile) {
var div = document.getElementById('div');
$scope.open = function(){
div.innerHTML += "open";
$compile(div)($scope);
}
$scope.close = function(){
div.innerHTML += "close";
$compile(div)($scope);
}
});
如您所见,我正在重新编译 div
并将当前作用域绑定到它,它会起作用。这是工作示例:http://codepen.io/anon/pen/PNrRKL?editors=1010
试一试
var app = angular.module('myApp', []);
app.controller('appCtrl', function($scope) {
var div = angular.element(document.getElementById('div'));
$scope.open = function(){
div.append("open");
}
$scope.close = function(){
div.append("close");
}
});
我对 Angular 还很陌生,所以我还没有弄清楚它的所有小怪癖。目前我有一个用 ng-click="open()" 打开覆盖的按钮。在叠加层内还有另一个按钮,可以使用 ng-click="close()" 关闭叠加层。
就目前而言,如果另一个出现在视图中,则不会触发 ng-click 事件。如果 ng-click="open()" 存在, ng-click="close()" 将不会触发,反之亦然。
这是我正在谈论的一个更简单的版本,因为我正在做的事情在实际应用程序上有点繁重:
查看
<button ng-click="open()">Open</button>
<div id="overlay">
<button ng-click="close()">Close</button>
</div>
控制器
$scope.open = function(){
//some move.js to open the overlay
}
$scope.close = function(){
//some move.js to close the overlay
}
叠加层不是动态生成的,而是呈现给页面加载。
下面是@sz tech 提供的解决方案。不是 $compile 方法。 http://codepen.io/NicholasByDesign/pen/WwqMXa?editors=1010
只是一种旁注,因为我认为这不会有什么不同。我在 nodejs 和 jade 环境中工作。我把它作为常规 HTML 并省略了包装 open/close 函数的控制器代码以简化事情。
问题是您正在更新 (div.innerHTML += "close";
) 包含 angular 代码 (ng-click="close()"
) 的 div 并且绑定将消失,请尝试重新编译更新后的 div 即可。试试这个代码:
var app = angular.module('myApp', []);
app.controller('appCtrl', function($scope,$compile) {
var div = document.getElementById('div');
$scope.open = function(){
div.innerHTML += "open";
$compile(div)($scope);
}
$scope.close = function(){
div.innerHTML += "close";
$compile(div)($scope);
}
});
如您所见,我正在重新编译 div
并将当前作用域绑定到它,它会起作用。这是工作示例:http://codepen.io/anon/pen/PNrRKL?editors=1010
试一试
var app = angular.module('myApp', []);
app.controller('appCtrl', function($scope) {
var div = angular.element(document.getElementById('div'));
$scope.open = function(){
div.append("open");
}
$scope.close = function(){
div.append("close");
}
});