角度路由绑定参数替换

时间:2017-11-21 02:11:08

标签: angular

我像这样使用router.navigate:

this.router.navigate([link, params])

其中link是url,params是包含参数键/值的对象。然而,这并不是我想要做的事情。

我正在使用自定义组件中的primeNG数据表。我想给它一个linkMap,以便我可以使用参数化的URL模板链接表中的特定列,如下所示:

id = / detail /:id

在我的表中,我将检查地图以查看是否需要链接特定列(即" id")然后获取URL。我想要做的是替换:id代表该行上下文中的数据,例如/ detail / 5等。这很简单,但我目前得到的是:

/细节:ID; ID = 5

如何将:id本身替换为值5?我可以通过regexp来实现,但如果它存在,宁可使用Angular内置功能。<​​/ p>

要澄清:我有一个键/值映射和一个带有命名参数的字符串,我需要进行就地替换:

/ detail /:id /:code /:subcode /:id /:id,{id:5,代码:&#39; PRG&#39;,子代码:&#39; AB&#39;}应该会产生在URL / detail / 5 / PRG / AB / 5/5

我无法按照要求的顺序提供论据,即[5,&#39; PRG&#39;&#39; AB&#39;,5,5],因为这需要我弄清楚参数的顺序。我需要Angular为我做这件事。

2 个答案:

答案 0 :(得分:0)

通过查看您当前的网址输出,您似乎正在创建/details/:id;id=5之类的网址,从而生成不需要的网址router.navigate(['/details', {id: 5}]); //will for '/details/5' 。相反它应该是

router.navigate(['/details', {id: 5, testId: 1}]);
//will for '/details/5/1'

如果是多个参数,它将看起来像

{{1}}

答案 1 :(得分:0)

由于您使用的是TypeScript,因此不要执行任何字符串操作。通过反向标记使用模板文字将值添加到您的路线:

SqlCommand cmd = new SqlCommand(" SELECT [job_id], [name_job] FROM [Job] WHERE LEFT(job_id, 2) = @result3 AND SUBSTRING(job_id, 2, 1) != '0' ORDER BY name_job", con);

 cmd.Parameters.Add("@result3", SqlDbType.Char, 2).Value = result2; //this is the fist 2 character from job_id

  SqlDataAdapter sda = new SqlDataAdapter(cmd);
           DataTable dt = new DataTable();
           con.Open();
           sda.Fill(dt);
           con.Close();

           DropDownList1.DataSource = dt;
           DropDownList1.DataTextField = "job_id";
           DropDownList1.DataValueField = "name_job";
           DropDownList1.DataBind();