angularjs - 为什么我的服务无法仅在我的一个 Controller 中正确加载?

标签 angularjs

我使用 MEAN 堆栈构建了我的个人网站,并使用在线 MongoDB 构建了一个后端来存储我网站的所有内容。然后,我创建了一个名为“contentService”的 Angular 服务,以通过 API 获取所有内容。我的网站上有 5 个页面,在 4/5 时,当我将“contentService”注入(inject) Controller 时,内容正确加载。

但是,在这个特定的 Controller “portfolioController”上,当我尝试注入(inject)“内容”时,没有任何数据通过。我什至在所有不同的页面上做了一个console.log,这是唯一一个数据没有显示在我的控制台中的页面。还收到错误“Content.all 不是函数”,因为它没有通过。

显然,我以某种方式错误地注入(inject)了它,但我尝试重新排列,但找不到正确的组合。这里有什么问题吗?

正确加载服务的 Controller 示例 -

angular.module('aboutCtrl', ['contentService'])

.controller('aboutController', function(Content) {

  var vm = this;

  Content.all()
    .success(function(data) {
      vm.paragraphOne = data[0].aboutParagraphs[0].paragraph;
      vm.paragraphTwo = data[0].aboutParagraphs[1].paragraph;
      vm.profiles = data[0].socialMediaProfiles;
    });

  vm.firstParagraph = true;

  vm.switchParagraph = function() {
    vm.firstParagraph = false;
  };

});

未正确加载内容的代码 -

angular.module('portfolioCtrl', ['ui.bootstrap', 'contentService'])

.controller('portfolioController', ['filterFilter', '$modal',        function(Content, filterFilter, $modal) {

  var vm = this;

  Content.all()
    .success(function(data) {
      vm.schools = data[0].languages;
      vm.companies = data[0].projects;
    });

  vm.carouselInterval = 3000;
  vm.noWrapSlides = false;

  vm.projectsToShow = vm.projects;

  vm.projectSort = function(language) {
    vm.projectsToShow = vm.projects;

    switch (language.reference) {

      case 'all':
        vm.projectsToShow;
        break;

      case 'angular':
        vm.projectsToShow = filterFilter(vm.projectsToShow, 'angular');
        break;

      case 'node':
        vm.projectsToShow = filterFilter(vm.projectsToShow, 'node');
        break;

      case 'ruby':
        vm.projectsToShow = filterFilter(vm.projectsToShow, 'ruby');
        break;

      default:
        vm.projectsToShow;
    };
  };

  vm.selectedProject;

  vm.openProject = function() {

    var modalInstance = $modal.open({
      animation: true,
      templateUrl: 'app/views/pages/portfolioModal.html',
      controller: 'modalCtrl',
      controllerAs: 'modal',
      size: 'lg',
      resolve: {
        project: function() {
          return vm.selectedProject;
        }
      }
    });
  };

}])

.controller('modalCtrl', ['$modalInstance', 'project',     function($modalInstance, project) {

  var vm = this;

  vm.selectedProject = project;

}]);

最佳答案

您的注入(inject)器数组缺少 Content 变量。如果您选择使用该语法,则必须在此处列出所有依赖项。

.controller('portfolioController', ['Content', 'filterFilter', '$modal',          
    function(Content, filterFilter, $modal) {
        ...
}])

旁白:您不应该使用注入(inject)器数组语法。它非常容易出错,并且只有在缩小代码时才需要它。如果你要缩小,你应该使用 ngAnnotate无论如何都要处理依赖符号。

关于angularjs - 为什么我的服务无法仅在我的一个 Controller 中正确加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32729289/

相关文章:

javascript - Angular Js在 Controller 中过滤嵌套数组

javascript - JavaScript 中的 if else 语句无法正常工作

javascript - 如何在使用 javascript 将数据导出到 .csv 时更改单元格类型和其他属性

javascript - AngularJS "listen"如何改变模型?

javascript - 在angular2中加载模板时如何调用函数?

javascript - Angularjs: promise

AngularJS 在指令模板中评估 $rootScope 变量

javascript - 我在 angular js Uncaught Error : [$injector:modulerr] 中收到这样的错误

javascript - 同一字段中的 Angular 下拉菜单和文本输入以及 Angular 数据绑定(bind)

javascript - 使用http服务时访问xampp本地主机文件