离子控制器定义

离子控制器定义

问题描述:

我是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

恰好是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是一个很好的起点。