假設我有嵌套的DOM,並且每個都有ui-sref
不同的angular-ui-router
狀態。我想點擊外部只提醒外部並點擊內部只提醒內部。目前如果我點擊內部,它會警告外部和內部狀態。防止在嵌套時調用父親ui-sref
HTML:
<!DOCTYPE html>
<html ng-app="plunker">
<head>
<meta charset="utf-8" />
<title>AngularJS Plunker</title>
<script>document.write('<base href="' + document.location + '" />');</script>
<link rel="stylesheet" href="style.css" />
<script data-require="[email protected]" src="http://code.angularjs.org/1.2.13/angular.js" data-semver="1.2.13"></script>
<script data-require="[email protected]" data-semver="0.2.8" src="http://angular-ui.github.io/ui-router/release/angular-ui-router.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainCtrl">
<a ui-sref="outer" style="width:300px;height:300px;background:yellow;">
Outer
<span ui-sref="inner" style="width:100px;height:100px;background:red;">Inner</span>
</a>
</body>
</html>
的Javascript:
var app = angular.module('plunker', ['ui.router']);
'use strict';
app.config(['$stateProvider', '$urlRouterProvider', '$locationProvider', function($stateProvider, $urlRouterProvider, $locationProvider) {
$stateProvider
.state("outer", {
url: "/outer",
resolve: {
test: function() {
alert("Triggered state outer");
return true;
}
}
})
.state("inner", {
url: "/inner",
resolve: {
test: function() {
alert("Triggered state inner");
return true;
}
}
});
}]);
app.controller('MainCtrl', function($scope) {
});
鏈接:http://plnkr.co/edit/yzgUAA3lLwkF9svzczl3?p=preview
問題:
如何防止內部觸發外部狀態?
我應該爲內部DOM實現某種
stopImmediatePropagation
,所以它不會觸發父DOM的ui-sref
?有替代品嗎?也許手動使用
$state.go
?
更新1:
我不能因要求更改HTML。這只是一個簡化版本,因爲在我的代碼中,外部元素非常大,包含其他元素。
它的工作原理,但我似乎得到整個頁面重新加載,這可能不是所需的行爲......當然不適合我。 – Lewis
ui-sref更新a標籤的href項,它對click事件沒有影響。和jQuery一樣,你可以使用$('a')。attr('href','http://example.com').on('click',(e)=> {/ * something */})''' – itanex