通过ui-sref
调用时有效<a class="button" ui-sref="main.create">
但是当使用ng-click和$ stage.go调用它时,它会调用并呈现页面,但我的$ urlRouterProvider.otherwise将再次覆盖DOM。我在逐步调试时注意到了它。它可能认为main.create是一个不存在的URL。
这是ng-click的代码和功能。
<a href="#" ng-click="create()">Create Object</a>
这里是create()函数
$scope.create = function() {
$state.go('main.create');
};
在使用$state.go('main')
时调用ng-click="create()"
。但在调用$state.go('main')
之前,我在DOM中看到了正确的main.create页面呈现。我写了那个&#34; IF&#34;用于处理不存在的url的语句,以便将它们重定向回主页面。这是我的config.js。
.state('main', {
url: '/',
views: {
'@': {
templateUrl: 'app/main/main.html',
controller: 'MainController'
},
'content@main' : {
templateUrl: 'app/main/main.display.html'
}
}
})
.state('main.create', {
url: '/create',
views: {
'content@main' : {
templateUrl: 'app/main/main.create.html'
}
}
})
$urlRouterProvider.otherwise(function ($injector) {
var Session = $injector.get('Session');
var $state = $injector.get('$state');
if (Session.isAuthenticated()) {
$state.go('main'); // <-- this is what gets called when using ng-click and after main.create partial gets rendered
} else {
$state.go('login');
}
});
答案 0 :(得分:6)
这是因为您在同一个锚标记上触发操作和路径。在<a href="#" ng-click="create()">
中,您不需要同时href
和ng-click
。将其更改为<a ng-click="create()">
,或者如果需要href,请将其设置为空,例如<a href="" ng-click="create()">
。
答案 1 :(得分:0)
Claies是正确的,问题源于在同一个标签上同时使用href和ng-click,但正确的解决方案是确保你的$ scope.create()函数在紧接着之后立即返回false布尔值。调用$ state.go,然后href可以是你想要的任何东西,并将被忽略。
一般情况下(甚至在角度外),如果锚标签同时具有href和click事件处理程序,它将执行它们,首先是click事件处理程序,然后是href - 除非click事件handler返回false值,然后它有效地取消href执行。如您所述,不同的浏览器执行href =&#34;#&#34;和/或href =&#34;&#34;不同的是,如果你的$ scope.create()函数返回false,它就不会成为问题。