使用ui-router传递整个对象

时间:2016-08-30 21:09:27

标签: angularjs angular-ui-router

首先,我使用ui-router

实际上我已将 slug 传递给states并且它完美无缺,正如您所见:

.state('pages', {
    url: '/:slug',
    template: '<page-content></page-content>'
})

<a ui-sref="pages({ slug: item.slug })" title="{{item.title}}" ng-repeat="item in $ctrl.menu_items">{{ item.title }}</a>

这样我就可以在$stateParams和URL中获取slu .. 但是,我想发送整个object并使用 slug 保留网址。

下面你可以看到我的尝试:

config

.state('pages', {
    url: 'obj.slug', // -> What should I put here? (of course /:slug doesn't work anymore)
    template: '<page-content></page-content>',
    params: { obj: null }
})

HTML:

<a ui-sref="pages({ obj: item })" title="{{item.title}}" ng-repeat="item in $ctrl.menu_items">{{ item.title }}</a>

它正在努力将整个对象传递到状态(我可以使用$stateParams获取),但是我无法动态生成URL。

object的一个例子:

{
  id: 6480,
  title: "Test",
  slug: "test"
}

所以,问题是:

有没有办法使用objectparams的属性生成 url (就像我正在做的那样)?例如:&#39; site.com/test'? (test是我想要放入网址的slug

1 个答案:

答案 0 :(得分:1)

重新加载后,您无法更改网址定义。你想要做类似的事情

.state('pages', {
    url: '/pages/:slug', // -> What should I put here?
    template: '<page-content></page-content>',
    params: { obj: null }
})

然后使用&#34; slug&#34;部分来确定从那里去哪里,可能来自resolve属性,它允许你将对象注入你的控制器。

修改

也许这更像是你正在寻找的东西。

.state('pages', {
        url: '/:pageName' 
        template: '<page-content></page-content>',
        params: { obj: null }
    })

然后你改变状态

$state.go('pages', {pageName: item.Name, obj: item});

我不确定你是如何使用ui-sref在锚标签上做的那样。也许这个?

<a ui-sref="pages({pageName: item.Name, obj: item})"