Angularjs ';ui sref';未按预期工作的角度UI路由器的
如果我使用href,UI路由器将按预期工作。但是,如果我使用的是ui-sref,它就不能像预期的那样工作 我对以下示例有两个问题:Angularjs ';ui sref';未按预期工作的角度UI路由器的,angularjs,angular-ui-router,Angularjs,Angular Ui Router,如果我使用href,UI路由器将按预期工作。但是,如果我使用的是ui-sref,它就不能像预期的那样工作 我对以下示例有两个问题: 锚点“link-series-2-no-param”和“link-series-2-one-param”不会触发“否则”(它们在“link-series-1”中触发)。如果他们需要转到“否则”怎么办 如果您单击所有“link-series-2”并以相反的方式执行相同操作,则它将不起作用(即使您单击其他链接,也始终显示“link-series-2-two-param
- 锚点“link-series-2-no-param”和“link-series-2-one-param”不会触发“否则”(它们在“link-series-1”中触发)。如果他们需要转到“否则”怎么办
- 如果您单击所有“link-series-2”并以相反的方式执行相同操作,则它将不起作用(即使您单击其他链接,也始终显示“link-series-2-two-params”的结果)
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js" ></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.3.2/angular-ui-router.min.js" ></script>
<script type="text/javascript" src="a01.js"></script>
...
<a ui-sref='root'>Home</a>
<br>
<a href='#/demo1/'>link-series-1-no-param</a>
<a href='#/demo1/30'>link-series-1-one-param</a>
<a href='#/demo1/30/40'>link-series-1-two-param</a>
<br>
<a ui-sref-opts="{reload: true, notify: true}" ui-sref='demo1'>link-series-2-no-param</a>
<a ui-sref-opts="{reload: true, notify: true}" ui-sref='demo1({a: 30})'>link-series-2-one-param</a>
<a ui-sref-opts="{reload: true, notify: true}" ui-sref='demo1({a: 30, b:40})'>link-series-2-two-param</a>
<hr>
<div ui-view></div>
...
link-series-2-no-param
link-series-2-one-param
link-series-2-two-param
a01.JS:
var app = angular.module('app', ['ui.router']);
app.config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider){
$stateProvider
.state('demo1', {
url: '/demo1/:a/:b',
templateUrl: 'demo1.htm',
controller: 'demo1'
})
.state('root', {
url: '/',
template: '<strong>you are at root..click something else</strong>'
});
$urlRouterProvider.otherwise("/");
}]);
app.controller('demo1', ['$scope', '$stateParams', function($scope, $stateParams){
$scope.a = $stateParams.a;
$scope.b = $stateParams.b;
console.log('a = ' + $stateParams.a + ', b = ' + $stateParams.b);
}]);
var-app=angular.module('app',['ui.router']);
app.config(['$stateProvider','$urlRouterProvider',函数($stateProvider,$urlRouterProvider){
$stateProvider
.州(“demo1”{
url:“/demo1/:a/:b”,
templateUrl:'demo1.htm',
控制器:“demo1”
})
.state('根'{
url:“/”,
模板:'您在根目录下..单击其他内容'
});
$urlRouterProvider。否则(“/”);
}]);
app.controller('demo1',['$scope','$stateparms',函数($scope,$stateparms){
$scope.a=$stateParams.a;
$scope.b=$stateParams.b;
log('a='+$stateparms.a+',b='+$stateparms.b);
}]);
demo1.htm:
<div>
a = {{a}}, b = {{b}}
</div>
a={{a},b={{b}
在上面的示例中,我缺少了什么?本例中的行为来自一个事实,即我们使用了
$state.go
选项:{reload:true}
<a ui-sref-opts="{reload: true ...
在更改任何参数之前-不会触发状态更改。希望这有点帮助…理解。但是,即使使用“reload:true”和参数更改,如果我们开始单击所有“link-2”系列(按顺序)并反向执行,结果也不一致。具体来说,如果我们在link-2-series-two-param(参数存在差异)之后单击link-2-series-one-param,它不会为link-2-series-one-param重新加载这里的要点是-使用
$state.go
,即使用ui-sref
我们从上一次运行中获得了$stateParams。所以,如果:b的值已经传递。。。现在已经不见了,它还会在那里。。。重复使用。如果这是一个错误,我不确定。我会说什么?如果可能的话,请不要在这里浪费时间。尝试调整应用程序以将两个参数传递到ui sref。例如,显式NULL或-1…Plase,使用ui sref='demo1({a:30,b:NULL})
检查此调整后的plunker,希望它能有所帮助如果您不想继承现有的参数值,请使用{inherit:false}
<a ui-sref-opts="{reload: false ...