4

В первый раз я перемещаться по вложенным маршруту, я получаю это исключение, «TypeError: Не удается прочитать свойство„контроллера“неопределенных»TypeError: Не удается прочитать свойство «контроллер» неопределенной

Это вызывает мое приложение не работайте правильно. Однако, если я перемещаюсь вокруг, он начинает работать отлично.

На приведенном ниже рисунке показаны значения переменных, а строка кода, которая выбрасывает, имеет неопределенный контроллер, который вызывает проблемы. Этот код является частью Ionic Framework.

Нажмите на изображение, чтобы увидеть в полный размер

At Debug Breakpoint where exception occurs

Это мой единственный JavaScript-файл, который определяет только модуль.

angular.module("sa", ["ionic"]) 
    .run(function($ionicPlatform) { 
     $ionicPlatform.ready(function() { 
      // hide the accessory bar by default (remove this to show the accessory bar above the keyboard 
      // for form inputs) 
      if (window.cordova && window.cordova.plugins.Keyboard) { 
       window.cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true); 
      } 
      if (window.StatusBar) { 
       // org.apache.cordova.statusbar required 
       window.StatusBar.styleDefault(); 
      } 
     }); 
    }) 

.config(function($stateProvider, $urlRouterProvider) { 
     $stateProvider 
      .state("login", { 
       url: "/login", 
       templateUrl: "app/manager/login.html" 
      }) 

      .state("manager", { 
       abstract: true, 
       url: "/manager", 
       templateUrl: "app/manager/menu.html" 
      }) 
      .state("manager.jobs", { 
       url: "/jobs", 
       views: { 
        "managerContent": { 
         templateUrl: "app/manager/requested-jobs.html" 
        } 
       } 
      }) 
      .state("manager.detail", { 
       url: "/detail", 
       views: { 
        "managerContent": { 
         templateUrl: "app/manager/requested-job-detail.html" 
        } 
       } 
      }); 

     $urlRouterProvider.otherwise("/login"); 
}); 

Это login.html, что нагрузка правильно. Он также позволяет клику и навигации по кнопке.

<ion-view view-title="Login" > 

    <ion-nav-bar class="bar-light"></ion-nav-bar> 

    <ion-content class="has-header" > 
    <ion-list> 
     <ion-item href="#/manager/jobs"> 
     Manager 
     </ion-item> 
    </ion-list> 
    </ion-content> 

</ion-view> 

Это файл меню сторона.

<ion-side-menus enable-menu-with-back-views="false"> 

    <ion-side-menu-content> 
    <ion-nav-bar class="bar-light"> 
     <ion-nav-back-button> 
     </ion-nav-back-button> 

     <ion-nav-buttons side="left">
 
     <button menu-toggle="left" class="button button-icon icon ion-navicon"></button> 
     </ion-nav-buttons> 

     <ion-nav-view name="managerContent"></ion-nav-view> 

    </ion-nav-bar> 
    </ion-side-menu-content> 

    <ion-side-menu side="left"> 

    <ion-header-bar class="bar-assertive"> 
     <span class="title">Cluber</span> 
    </ion-header-bar> 

    <ion-content> 
     <ion-list> 
     <ion-item class="item-icon-right" menu-close ui-sref="login"> 
      <i class="icon ion-ios-arrow-right icon-accessory"></i>Logout 
     </ion-item> 
     </ion-list> 
    </ion-content> 

    </ion-side-menu> 

</ion-side-menus> 

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

<ion-view view-title="Dashboard"> 
    <ion-content has-bouncing has-header="true"> 
    <ion-list> 
     <ion-item class="item-border item-icon-right" ui-sref="manager.detail"> 
     Clean Apartment 
     <i class="icon ion-ios-arrow-right icon-accessory"></i> 
     </ion-item> 
     <ion-item class="item-border item-icon-right" ui-sref="manager.detail"> 
     Repair Side Walk 
     <i class="icon ion-ios-arrow-right icon-accessory"></i> 
     </ion-item> 

    </ion-list> 
    </ion-content> 
</ion-view> 

Это самый простой пример у меня есть, что всегда воспроизводит исключение JavaScript. Опять же, это происходит только в первый раз, к которому осуществляется «manager.jobs».

+1

Вы можете использовать 'debug' проверить значение' enteringHeaderBar' перед вызовом 'enteringHeaderBar.controller ' –

+0

Похоже, что 'enterHeaderBar' не определен. – mwilson

+0

Да, вводHeaderBar не определен. Это значение вычисляется на две строки выше ошибки. – Karl

ответ

2

Проблема заключается в следующей строке HTML в файле menu.html. что это вложен внутри <ion-nav-bar>, вместо этого он должен быть прямым потомком <ion-side-menu-content>.

<ion-nav-view name="managerContent"></ion-nav-view>

-1

self.isInitialized фактически false, который установит enteringHeaderBar в null (две строки выше выделенная один).

Вы устанавливаете self.isInitialized в true в конце функции. Именно по этой причине это не удается в первый раз, но затем работает (в следующем обновлении это верно, и enteringHeaderBar будет установлен в getOffscreenHeaderBar().

+0

Да, я согласен. К сожалению, код на картинке - из структуры Ionic, извинения за то, что вы не поняли этого. Я не могу редактировать их код. Спасибо за информацию. – Karl

+0

О, ладно. Но почему же это принятый ответ? :) – user2084865

+0

Я новичок в StackOverflow. Я изменил принятый ответ на вышеупомянутый ответ. – Karl