将我的Controller和Factory与App.js分开 - AngularJS

时间:2015-03-09 22:25:12

标签: javascript angularjs

尝试将我的控制器和工厂与我的大型 app.js 文件分开。我通过将所有内容放入一个文件来学习Angular,但现在我试图通过分离我的文件来组织它。

最初我有类似的东西( app.js )。

var app = angular.module("app", ['ngRoute']);

app.config(function($routeProvider) {
  $routeProvider

  .when('/', {
    templateUrl: 'pages/home.html',
    controller: 'HomeController'
  })

  .when('/home', {
    templateUrl: 'pages/home.html',
    controller: 'HomeController'
  })

  .when('/faq', {
    templateUrl: 'pages/faq.html',
    controller: 'FAQController'
  })

  .otherwise({
    redirectTo: '/unknown'
  });
});

app.factory('FAQMethodService', function() {
  return {
    faqs: [
      {
        question : "Another FAQ",
        answer : "Another FAQ."
      },
      {
        question : "Another FAQ",
        answer : "Another FAQ."
      },
      {
        question : "Another FAQ",
        answer : "Another FAQ."
      },
      {
        question : "Another FAQ",
        answer : "Another FAQ."
      }
    ]
  };
});

app.controller('FAQController', function($scope, FAQMethodService) {
  $scope.faqList = FAQMethodService.faqs;
  $scope.title = "FAQ";
});

app.controller('HomeController', function($scope) {
  $scope.title = "Home";
});

对于我的第一步分离,我从 app.js 中删除了 FAQController 部分,并创建了一个名为 faqController.js 的新文件(我把它包含在我的index.html中)。

angular.module('app').controller('FAQController', ['$scope', '$http', function($scope, FAQMethodService) {
  $scope.faqList = FAQMethodService.faqs;
  $scope.title = "FAQ";
}]);

当我打开我的FAQ页面时,我得到 $ scope.title 变量(因为我显示它),但我的 FAQMethodService 信息没有出现。

问题:当我的Controller在另一个文件中时,如何获取我的工厂(我可以将工厂分成另一个文件)吗?

1 个答案:

答案 0 :(得分:2)

使用数组表示法注册事物时,字符串参数的名称和顺序必须与构造函数的参数序列完全匹配。

你有不匹配的地方。您已经要求Angular将$ http作为FAQMethodService

注入您的控制器

.controller('FAQController', ['$scope', '$http', function($scope, FAQMethodService) {

应该是:

.controller('FAQController', ['$scope', 'FAQMethodService', function($scope, FAQMethodService) {