离子控制器定义



我对angularj和ionic是很新的,我一直遇到一个问题。在下面,我从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'
      }
    }
  })

正如@claies所说,您需要将ujobsCtrl定义为控制器。您正在使用的那条行不是一个定义 - 实际上是Ujobsctrl控制器的请求;而且,如果您还没有定义它(我假设您还没有!),那么事情肯定会无法正常工作。一些文档要查看:UI-Router在控制器上的文档;然后在控制器上的Angularjs文档。

以下代码将是您使用的选项:

选项#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将是拥有大量控制器的清洁方式 - 您可以将它们分解为controllers/目录中的单个文件,并将该逻辑从.config块和状态定义中获取。对于理智检查,选项#1是一个不错的起点。

最新更新