angularjs - 使用 stateProvider angularjs 的具有多个可选参数的 URL

标签 angularjs angular-ui-router angular-ui state

Can angularjs routes have optional parameter values?所述 和 AngularJS: Routing with URL having optional parameters 带有参数名称的问号 ? 应该使其成为可选的。它对我没有帮助。

var app = angular.module('app', ['ui.router','ngRoute']);

app.config(function ($urlRouterProvider, $stateProvider) {
    $urlRouterProvider.otherwise('/a');
    $stateProvider.state('a', {
        url: '/a',
        templateUrl: 'views/a.html'
    }).state('b', {
        url: '/b/:code?/:d?',
        templateUrl : 'views/b.html'
    })
});

此网址 http://localhost:xx/kk/#/b/1/2对我来说很好用。 但是http://localhost:xx/kk/#/b (没有任何参数)和 http://localhost:xx/kk/#/b/1不适合我...

您可以看到我正在将 $stateProvider 与 ui-router 一起使用。我不想切换到 $urlRouteProvider

最佳答案

a working plunker

我们需要的是一个名为 params : {} 的设置,它可以处理可选参数:

 params: {
    code: {squash: true, value: null},
 }

所以状态定义是

.state('b', {
    url: '/b/:code/:d',
    templateUrl : 'views/b.html',
    params: {
      code: {squash: true, value: null},
      d   : {squash: true, value: null},
    }
})

这些都行得通:

<a href="#/b">
<a href="#/b/code1">
<a href="#/b/code22">
<a href="#/b/code333/d4">

查看这些以获取更多详细信息和示例:

这里还有一些魔法:

关于angularjs - 使用 stateProvider angularjs 的具有多个可选参数的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33915852/

相关文章:

javascript - 使用 ng-repeat Angularjs 从动态添加的文本框中读取所有值

AngularJS-设置标题属性

angularjs - angularjs 中的 Controller 依赖项

javascript - {lang :(? :da|en)} do in Javascript? 是什么

javascript - Angular 动态 URL

angularjs - Angular Material 复选框 - 将功能添加到 ng-checked

javascript - Angular:根据服务方法调用设置路由

javascript - 有没有办法有条件地关闭 Controller 中的 reloadOnSearch?

angularjs - 为什么 Angular-ui 新状态路由器在只有参数改变时才会转换?

angularjs - 使用 AngularJS 自动定位工具提示