javascript - 如何将 Angular 的 ui-sref 插入链接文本中?

标签 javascript html angularjs angular-ui-router

我有一个使用 AngularJS 的应用程序。 在我的观点中,我有一些看起来像这样的东西:

<span>My URL: <a ui-sref="mystate({ arg1_name: 'arg1_val', arg2_name: 'arg2_val'})">XXX</a></span>

这完全符合我的预期。没问题。

但是,我想将 XXX 替换为 <a> 中的实际 URL。标签。 我怎么做?只需将 XXX 替换为整个 ui-sref表达式不起作用。

最佳答案

如果您使用的是路由器版本 0.2.0,则有一种新方法可以从状态配置中获取 url。您可以使用$state.href(stateOrName [, params] [, options])为了那个原因。如果您将 $state 实例放置在作用域上,您可以执行以下操作:

<span><a 
   ui-sref="mystate({ arg1_name: 'arg1_val', arg2_name: 'arg2_val'})">
   {{$state.href('mystate', { arg1_name: 'arg1_val', arg2_name: 'arg2_val'})}}
</a></span>

选项可以是:-

1) lossy Boolean (默认 true) 如果为 true,并且没有与第一个参数中提供的状态关联的 url,则将从第一个可导航祖先(也称为具有有效 url 的祖先)构建构造的 href url )。

2) 继承 bool 值(默认 false)如果为 true 将从当前 url 继承 url 参数。

3)相对stateObject(默认$state.$current),当使用相对路径(例如'^')转换时,定义相对于哪个状态。

4) 绝对 bool 值 (默认 false) 如果为 true 将生成绝对 url,例如“http://www.example.com/fullurl”。

除非将 View 关联到范围或 Controller 实例(如果您使用 Controller As),否则您将无法访问 View 中注入(inject)的 $state。因此,您可以在 Controller 上添加作用域方法。

 $scope.getUrl = function(state, params){
     return $state.href(state, params, anyOptions);
 }

在你看来:-

{{getUrl('mystate', { arg1_name: 'arg1_val', arg2_name: 'arg2_val'})}}

并通过调用getUrl函数在 View 上访问它。如果您希望跨 Controller 使用此功能,您可以将其移动到 utilityService 函数,或者将实用程序方法放置在 run block 中的 rootScope 上,以便任何子作用域都可以访问它(尽管对于单元测试,您可能需要基于模拟它)在您的设置上)。

记住注入(inject)$state

关于javascript - 如何将 Angular 的 ui-sref 插入链接文本中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27828246/

相关文章:

angularjs - 如果被包含的内容为空,如何隐藏元素?

javascript - 仅当 html 内容高度大于视口(viewport)高度时,如何才能使元素在页面上可见?

javascript - 使用 try/catch 和嵌套的 Promise 等待

javascript - PDFBOX-1.8.10 中是否有任何字段可以保存图像?

javascript - 更改绘图的背景颜色

javascript - 在 Rails 中存储 Angular 文件的最佳位置

javascript - 奇怪的行为querySelector

javascript - API 耗时太长,映射函数在数据加载之前触发

html - 使 Bootstrap 列流畅,(自动可调)现在它们堆叠在小屏幕上

javascript - 来自 JavaScript(或 Angular JS)的排队 API 消息