Why angular returns with referenceError: ngResource is not defined?

Why angular returns with referenceError: ngResource is not defined?

我用 angular 1.4.4 完成了快速客户端路由。在每个教程中,我都看到了将模块分配给变量(通常是:app)并对其执行不同任务的方法,如下所示:

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

app.config(function ($routeProvider, $locationProvider) {
    $locationProvider.html5Mode({
        enabled: true,
        requireBase: false
    });
    $routeProvider
        .when('/', {
                     templateUrl: '/partials/main',
                     controller: 'MainController'
                   });
});

app.controller('MainController', function ($scope) {
    $scope.test = 'Hi Angular';
});

在我现在做的教程中,我看到了完全不同的方法:

angular.module('skeleton', ['ngResource', 'ngRoute']);

angular.module('skeleton').config(function($routeProvider, $locationProvider){
    $locationProvider.html5Mode({
        enabled: true,
        requireBase: false
    });
    $routeProvider
        .when('/', { templateUrl: '/partials/main', controller: 'mainCtrl'});
});

angular.module('skeleton').controller('mainCtrl', function($scope){
    $scope.test = "Hello Angular";
});

我认为这只是偏好,所以我选择了 'app' 版本,因为我发现它更具可读性。 不幸的是,它导致 angular 抛出

ReferenceError: ngResource is not defined 
  1. 有人知道这种行为的原因吗?
  2. 您更喜欢哪种方法?

您需要正确注入依赖项,在引号内传递 ngResourcengRoute,否则它们将被视为变量,因此您一定会遇到错误。

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

首先,问题不在于将模块声明分配给变量 'app' 然后使用它。这两种方法都有效,但最好在不将其分配给变量的情况下进行声明,这样可以避免可能导致模块覆盖的变量冲突。

您的代码中的问题在于语法。请更正如下所示:

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

dependency Annotation 也可以通过将依赖项数组分配给'$inject' 属性 或直接作为函数属性来完成。

请参阅此 angular 指南以供参考:

https://docs.angularjs.org/guide/di