我像这样使用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为我做这件事。
答案 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();