一尘不染

如何将带有URL的数据传递给ui-sref?

angularjs

我有任何看法: <a ui-sref="app.file({path: file.path})">{{ file.path }}</a>

file.pathhtml/hero-sidebar.html

我的状态定义为:

  .state('app.file', {
    url: '/file/*path'
    views:
      repositoryView:
        templateUrl: '/templates/app/_file.html'
  })

但是当我单击链接时,它转到 http://localhost:9001/app/file/html%252Fhero-sidebar.html

我想要的是去 http://localhost:9001/app/file/html/hero-sidebar.html

可以将ui-router与AngularJS一起使用吗?


阅读 238

收藏
2020-07-04

共1个答案

一尘不染

ui-router Github中 已经记录了问题,您可以在
这里
找到它
****

为了解决这个问题,您需要在配置文件中添加此代码,以处理url的编码和解码。

您可以使用以下代码注册自己的替换“字符串”类型,从而覆盖内置的字符串类型(执行斜线编码)

app.config(['$urlMatcherFactory', '$stateProvider', function($urlMatcherFactory, $stateProvider) {
    //$stateProvider.state() & other code here

    function valToString(val) {
        return val != null ? val.toString() : val;
    }

    function regexpMatches(val) { /*jshint validthis:true */
        return this.pattern.test(val);
    }
    $urlMatcherFactory.type("string", {
        encode: valToString,
        decode: valToString,
        is: regexpMatches,
        pattern: /[^/]*/
    });
}]);

工作朋克

2020-07-04