سؤال

النظر في المسائل التالية واجهة جهاز التوجيه التكوين:

$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 صمم

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top