2017-01-14 5 views
1

У меня есть два состоянияугловой UI-маршрутизатор ребенок состояние решительность перезаписана родитель

var books = { 
    name: "books", 
    url: "/books", 
    component: "booksComponent", 
} 

var specificBook = { 
    name: "books.specific", 
    url: "/{Id}", 
    component: "booksComponent", 
    resolve : { 
     Id: ["$stateParams", getId] 
    } 
} 

$stateProvider.state(books); 
$stateProvider.state(specificBook); 

function getId($stateParams){ 
    return $stateParams.Id; 
} 

, но по какой-то причине, когда я получаю к URL #/books/12345 Ид, полученного компонент undefined

что неправильно ? Должен ли я указывать маршруты по-разному?

+0

ознакомьтесь с этим https://github.com/angular-ui/ui-router/issues/3256 –

ответ

0

Когда у вас есть URL-адреса, у них есть динамические части, которые называются параметрами, у вас есть несколько параметров для указанных параметров.

$stateProvider 
.state('books.specific', { 
    url: "/books/:id", 
    templateUrl: 'books.specific.html', 
    controller: function ($stateParams) { 
     expect($stateParams).toBe({id: "42"}); 
    } 
}) 

(OR)

В качестве альтернативы, вы можете использовать фигурные скобки.

url: "books/{Id}" 

В случае вашей проблемы, #/книги/12345, вам придется изменить свой адрес как образец 2 URL: «книги/{Id}», то вы будете иметь возможность работать как хотите.

С уважением.

0

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

resolve: { 
    Id: function ($stateParams) { 
     return $stateParams.Id; 
    } 
} 

Я не знаю, почему вы хотите, так как $ stateParams.Id может быть введен в контроллер и используется непосредственно. Помните, что вам нужно будет добавить «Id» в функцию контроллера, чтобы использовать его. Cheers

+0

Это именно то, что я делаю прямо сейчас ... – WindowsMaker

Смежные вопросы