Перейдите на другую страницу с помощью кнопки в angular 2

112

Я пытаюсь перейти на другую страницу, нажав кнопку, но это не работает. В чем может быть проблема. Сейчас я изучаю angular 2, и мне сейчас это немного сложно.

//Routes/Path in a folder call AdminBoard

export const AdminRoutes: Routes =[

  {
    path: 'dashboard',

    component: AdminComponent,
    children: [
      {path: '', redirectTo: 'Home'},
      {path: 'Home', component: HomeComponent},
      {path: 'Service', component: ServiceComponent},
      {path: 'Service/Sign_in', component:CustomerComponent}

    ]

  }

];

//Button is also in a different folder. Click button to navigate to this page           {path: 'Service/Sign_in', component:CustomerComponent}

  <button class="btn btn-success pull-right" ><a routerLink="/Service/Sign_in"> Add Customer</a></button>
Лиска Лискор
источник
1
попробуйте что-то вроде этого:<button class="btn btn-success pull-right" ><a [routerLink]="[ '.', 'Service/Sign_in' ]"> Add Customer</a></button>
Авнеш Шакья

Ответы:

255

Используйте его так, должно работать:

 <a routerLink="/Service/Sign_in"><button class="btn btn-success pull-right" > Add Customer</button></a>

Вы также можете использовать router.navigateByUrl('..')это так:

<button type="button" class="btn btn-primary-outline pull-right" (click)="btnClick();"><i class="fa fa-plus"></i> Add</button>    

import { Router } from '@angular/router';

btnClick= function () {
        this.router.navigateByUrl('/user');
};

Обновить

Вы должны ввести Routerконструктор следующим образом:

constructor(private router: Router) { }

только тогда вы сможете использовать this.router. Не забудьте также импортировать RouterModuleв свой модуль.

Обновление 2

Теперь, после Angular v4, вы можете напрямую добавить routerLinkатрибут на кнопку (как указано в @mark в разделе комментариев), как показано ниже -

 <button [routerLink]="'/url'"> Button Label</button>
Пардип Джайн
источник
2
я могу отправить с ним некоторые данные?
Anuj
12
Не уверен, что что-то изменилось с тех пор, как это было написано, но по состоянию на октябрь 2018 года кажется, что вы можете просто поместить [routerLink]атрибут прямо в <button>(что позволяет избежать некоторых проблем со стилем, которые могут возникнуть при оборачивании кнопки <a>)
Марк Адельсбергер,
Так какой путь самый чистый? Лучше не раскрывать маршрут в разметке, а сохранить его в файле машинописного текста, или же можно использовать «новый» способ [routerLink]в шаблоне?
Рин и Лен
это зависит от вас, ИМО, нет никакой логики, чтобы скрыть вашу разметку в шаблоне, поскольку вы собираетесь перейти к пользователю, который может увидеть на следующей странице. Думаю,
остальные
1
На первом уровне, html fileгде будет загружен компонент, должен быть <router-outlet></router-outlet>тег. пожалуйста, обратитесь к angular.io/api/router/RouterOutlet#description для получения дополнительной информации.
Tharusha
36

Вы можете использовать routerLink следующим образом:

<input type="button" value="Add Bulk Enquiry" [routerLink]="['../addBulkEnquiry']" class="btn">

или используйте <button [routerLink]="['./url']">в своем случае, для получения дополнительной информации вы можете прочитать всю трассировку стека на github https://github.com/angular/angular/issues/9471

другие методы также верны, но они создают зависимость от файла компонента.

Надеюсь, ваша проблема решена.

Ронит Оммен
источник
1
@Ronit Почему не просто: <button type = "button" value = "Добавить массовый запрос" routerLink = "../ addBulkEnquiry" class = "btn">? Почему вы используете квадратные скобки?
Энди Кинг
1
@AndyKing Поскольку он использует выражение (массив в качестве значения), foo="boo" это похоже на [foo]="'boo'". Может быть, вы хотите прочитать stackoverflow.com/questions/43633452/…
PhoneixS
1
Я предпочитаю этот ответ
HungNM2
13
 <button type="button" class="btn btn-primary-outline pull-right" (click)="btnClick();"><i class="fa fa-plus"></i> Add</button>


import { Router } from '@angular/router';

btnClick= function () {
        this.router.navigate(['/user']);
};
Аникет
источник
Сначала я сделал что-то подобное (используя router.navigate), затем искал другие идеи и теперь использую routerLink, как упоминалось в других ответах. Интересно, что лучше, или это имеет значение ...
Скотт
1

Важно, чтобы вы украсили ссылку маршрутизатора и ссылку в квадратных скобках следующим образом:

<a [routerLink]="['/service']"> <button class="btn btn-info"> link to other page </button></a>

Где « / service » в данном случае - это URL-адрес пути, указанный в компоненте маршрутизации.

Mwiza
источник
0

Ссылка на маршрутизатор на кнопке, кажется, мне подходит:

<button class="nav-link" routerLink="/" (click)="hideMenu()">
     <i class="fa fa-home"></i> 
     <span>Home</span>
</button>
Роб МакКейб
источник
0

ты можешь измениться

    this.router.routeReuseStrategy.shouldReuseRoute = () => false;

на уровне компонентов в конструкторе, как показано ниже

    constructor(private router: Router) {
            this.router.routeReuseStrategy.shouldReuseRoute = () => false; 
}
Безумный Джавад
источник
0

Следуй этим шагам

Добавьте импорт в свой основной компонент

import {Router } from '@angular/router';

В том же файле добавьте ниже код для конструктора и метода

constructor(private route: Router) {}
public Dashbord()
{
 this.route.navigate(['/dashboard']);
}

Это .htmlкод вашего файла

<button mat-button (click)="Dashbord()">Dashboard</button><br>

В app-routing.module.tsфайл добавить панель управления

const routes: Routes =
[
  { path: '', pathMatch: 'full' ,component: TestComponent},
  { path: 'dashboard', component: DashboardComponent } 
];

Удачи.

Арвинд Чурасия
источник