Angularjs ';ui sref';未按预期工作的角度UI路由器的

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

如果我使用href,UI路由器将按预期工作。但是,如果我使用的是ui-sref,它就不能像预期的那样工作

我对以下示例有两个问题:

  • 锚点“link-series-2-no-param”和“link-series-2-one-param”不会触发“否则”(它们在“link-series-1”中触发)。如果他们需要转到“否则”怎么办
  • 如果您单击所有“link-series-2”并以相反的方式执行相同操作,则它将不起作用(即使您单击其他链接,也始终显示“link-series-2-two-params”的结果)
a01.htm:

<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 ...