我使用的是angularjs版本1.3.13,ui-bootstrap-tpls版本0.12和angularjs ui路由器版本0.2.13。 我想通过使用ui-sref在手风琴中显示模板内容。加载手风琴内的模板后,click事件不会触发checkbox组件。 对于除按钮之外的所有元素,在以下位置阻止找到事件 对于这个问题,我在angular-ui-router.js中的ui-sref指令的onclick绑定事件中添加了一个条件。 任何人请告诉我这个解决方案是否正确? 我的代码如下所示。
<accordion>
<accordion-group is-open="true" ui-sref="addContract.add">
<accordion-heading>
Settings <i class="pull-right glyphicon"
ng-class="{'glyphicon-chevron-down': $state.includes('true'), 'glyphicon-chevron-down': !status.open}"></i>
</accordion-heading>
<div ui-view="kpiParamSettings" autoscroll="true"></div>
</accordion-group></accordion>
ui-sref具有以下html
<div>
<label><input id="login-remember" name="remember" type="checkbox" value="1">Stop</label>
</div>
element.bind("click", function(e) {
var button = e.which || e.button;
if ( !(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || element.attr('target')) ) {
// HACK: This is to allow ng-clicks to be processed before the transition is initiated:
var transition = $timeout(function() {
$state.go(ref.state, params, options);
});
e.preventDefault();
// if the state has no URL, ignore one preventDefault from the <a> directive.
var ignorePreventDefaultCount = isAnchor && !newHref ? 1: 0;
e.preventDefault = function() {
if (ignorePreventDefaultCount-- <= 0)
$timeout.cancel(transition);
};
}
});
在上面的点击事件中,我添加了以下条件
element.bind("click", function(e) {
if(e.target.type!="checkbox") // Condition for avoiding to bind the checkbox click event
{
var button = e.which || e.button;
if ( !(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || element.attr('target')) ) {
// HACK: This is to allow ng-clicks to be processed before the transition is initiated:
var transition = $timeout(function() {
$state.go(ref.state, params, options);
});
e.preventDefault();
// if the state has no URL, ignore one preventDefault from the <a> directive.
var ignorePreventDefaultCount = isAnchor && !newHref ? 1: 0;
e.preventDefault = function() {
if (ignorePreventDefaultCount-- <= 0)
$timeout.cancel(transition);
};
}
}
});
答案 0 :(得分:1)
使用element.bind
不会触发摘要周期,因此您的UI不会更新。使用ngClick或将$scope.$apply()
添加到点击处理程序以手动触发摘要周期。
答案 1 :(得分:0)
我使用以下手风琴声明解决了上述问题。
我的代码是
<accordion>
<accordion-group is-open="true" ui-sref="addContract.add">
<accordion-heading>
Settings <i class="pull-right glyphicon" ng-class="{'glyphicon-chevron-down': $state.includes('true'), 'glyphicon-chevron-down': !status.open}"></i>
</accordion-heading>
<div ui-view="kpiParamSettings" autoscroll="true"></div>
</accordion-group>
</accordion>
编辑代码后,问题已修复
<accordion>
<accordion-group is-open="true"> // Removed ui-sref from this line
<accordion-heading>
<a ui-sref="addContract.add"> // Added a with ui-sref
Settings <i class="pull-right glyphicon" ng-class="{'glyphicon-chevron-down': $state.includes('true'), 'glyphicon-chevron-down': !status.open}"></i>
</a>
</accordion-heading>
<div ui-view="kpiParamSettings" autoscroll="true"></div>
</accordion-group>
</accordion>