用ui-sref解析ui-router状态下的对象

时间:2014-02-11 14:40:39

标签: javascript angularjs angular-ui-router

在Angular控制器和ui-sref链接中拥有非常大的JSON对象我希望将此对象传递给ui-view中的模板控制器。
我知道,我可以使用ui-sref将参数传递给state,但我不希望这个对象出现在地址栏中。另外,我知道我们可以在状态中使用'resolve'选项,但我找不到如何从链接传递数据到'resolve'功能。

更新
如果我使用$ state.go那样:
路由器配置

state('social.feed.detailed',
     url: '/:activityID'
     templateUrl: 'views/social/detailedactivity.html'
)
模板中的

<ums-social-activity ng-repeat="record in SOC_FEED_CTRL.records"
     activity="record"
     ui-sref-active="selected"
     ng-click="SOC_FEED_CTRL.goToDetailed(record)">
</ums-social-activity>

在控制器中

$scope.SOC_FEED_CTRL.goToDetailed = (activity) ->
     # here activity is real object
     $state.go('social.feed.detailed', {'activityID':activity.id, 'activity':activity})

然后'activity'param根本没有解决。
更新2
如果我将路由配置修改为:

state('social.feed.detailed',
    url: '/:activityID?activity'
    templateUrl: 'views/social/detailedactivity.html'
)

然后activity是字符串“[object Object]”

2 个答案:

答案 0 :(得分:2)

您可以使用ui-router模块的$state.go函数调用手动传入不会出现在网址中的$stateParams。因此,您不必使用ui-sref属性,而是设置一个调用ng-click的{​​{1}}处理程序。

然后,将$state.go(STATE,{'param':JSON})注入您的控制器,然后阅读

$stateParams

重新获取JSON对象。

答案 1 :(得分:1)

可能是

    ui-sref-active="selected"

Selected代表一个对象

selected.name

selected.id

选中它看起来代表一个键值关系。无论如何,这正是我所经历的。

<a ui-sref="itinerary.name({name:person.id})">