2016-12-26 113 views
1

我是angularjs和離子的新手,我一直在遇到一個問題。下面我發佈了一些來自app.js文件的代碼,並且我注意到任何時候我定義一個新的控制器(註釋掉的行)都會導致應用程序不加載。離子控制器定義

我將我的代碼與其他應用程序模板進行了比較,似乎app.js文件中的所有內容都是正確的,因此我完全喪失了導致此問題的原因!有沒有人見過這樣的事?

.config(function($stateProvider, $urlRouterProvider) { 
    $stateProvider 

    .state('app', { 
    url: '/app', 
    abstract: true, 
    templateUrl: 'templates/menu.html', 
    controller: 'AppCtrl' 
    }) 

    .state('app.userJobs', { 
    url: '/userJobs', 
    views: { 
     'menuContent': { 
     templateUrl: 'views/userJobs.html' 
    //  controller: 'ujobsCtrl' 
     } 
    } 

    }) 
+0

是在某處定義的'ujobsCtrl'嗎? (將其分配給狀態與定義它不同)。該文件是否包含在您的應用程序中?什麼是生成的實際錯誤?只是說應用程序不加載不會提供很多信息繼續.... – Claies

回答

2

恰好是as @Claies said, you would need to define the ujobsCtrl as a controller。你不註釋的那一行不是一個定義 - 它實際上是一個請求爲ujobsCtrl控制器;如果你還沒有定義它(我假設你沒有!),那麼事情肯定會失敗。有些文檔可以查看:ui-router's docs on controllers;然後AngularJS's docs on Controllers

下面的代碼將選項供您使用:

選項#1:使用匿名函數作爲你的控制器:

.config(function($stateProvider, $urlRouterProvider) { 
    $stateProvider 
    .state('app', { 
     url: '/app', 
     abstract: true, 
     templateUrl: 'templates/menu.html', 
     controller: 'AppCtrl' 
    }) 
    .state('app.userJobs', { 
     url: '/userJobs', 
     views: { 
     'menuContent': { 
      templateUrl: 'views/userJobs.html' 
      // controller: 'ujobsCtrl' // <-- Can't use this, it's not defined 
      controller: function ($scope, $log){ 
      $log.log('yay!'); 
      } 
     } 
    } 
}) 

還是方案2,在那裏你定義一個單獨的控制器,命名爲ujobsCtrl

.config(function($stateProvider, $urlRouterProvider) { 
    $stateProvider 
    .state('app', { 
     url: '/app', 
     abstract: true, 
     templateUrl: 'templates/menu.html', 
     controller: 'AppCtrl' 
    }) 
    .state('app.userJobs', { 
     url: '/userJobs', 
     views: { 
     'menuContent': { 
      templateUrl: 'views/userJobs.html' 
      controller: 'ujobsCtrl' // <-- defined below, so we can now use this 
     } 
    } 
}) 
.controller('ujobsCtrl', function ($scope, $log){ 
    $log.log('yay!'); 
}) 

對於較大的應用程序,選擇2將是有大量的控制器的更清潔的方式 - 你可以打破這些伸到INDI個別文件在controllers/目錄中,並從.config塊和狀態定義中獲取該邏輯。儘管如此,選項#1是一個很好的起點。