لا يمكن الحصول على واجهة جهاز التوجيه الدولة params
-
21-12-2019 - |
سؤال
النظر في المسائل التالية واجهة جهاز التوجيه التكوين:
$stateProvider
.state('app', {
url: "/app",
abstract: true,
templateUrl: "templates/menu.html",
controller: 'AppCtrl'
})
.state('app.feed', {
url: "/feed",
views: {
'menuContent': {
templateUrl: "templates/feed.html",
controller: "FeedCtrl"
}
}
})
علي الرابط التالي في التطبيق:
<a ui-sref="app.feed({ feedId: 5 })">My Link</a>
أنا أحاول الحصول على feedId
في الدولة params:
angular.module('MyApp').controller('FeedCtrl', function($state) {
console.log($state.params);
});
ولكن ، لسوء الحظ ، $state.params
دائما {}
.
ما الخطأ الذي فعلته ؟
مكافأة السؤال
أتوقع FeedCtrl
أن يكون initialised في كل مرة كنت اضغط على الرابط ، أيفي كل مرة يتم تغيير حالة إلى app.feed
.لذا ، إذا كنت التغيير بين app.feed
الدولة و بعض الدول الأخرى عدة مرات ، أتوقع console.log
فوق تشغيل عدة مرات.ولكن يبدو واجهة جهاز التوجيه initialises FeedCtrl
مرة واحدة فقط.لماذا ؟
المحلول
لتمرير معلمة - لدينا لتحديد ذلك:
.state('app.feed', {
url: "/feed/{feedId}",
views: {
'menuContent': {
templateUrl: "templates/feed.html",
controller: "FeedCtrl"
}
}
في هذه الحالة نحن تحديد {feedId}
رؤية المزيد من هنا
بعض الأمثلة:
'/user/{id:[^/]*}'
- نفس'/user/{id}'
من المثال السابق.'/user/{id:[0-9a-fA-F]{1,8}}'
- على غرار المثال السابق ، ولكن مباريات فقط إذا كان معرف المعلمة يتكون من 1 إلى 8 عرافة أرقام.'/files/{path:.*}'
- مباريات أي عنوان URL تبدأ مع '/files/' و يلتقط بقية الطريق إلى المعلمة 'المسار'.'/files/*path'
- كما سبق.خاصة الجملة من أجل القبض على جميع.
في حال لدينا معلمة محددة ، وسوف التنقل بين الدول المختلفة feedId
القيم...سوف نرى حقا ، أن تحكم FeedCtrl
هو reinstantiated.هكذا ui-router
صمم