角度资源没有正确注入AMD

时间:2014-04-10 11:55:50

标签: javascript angularjs requirejs amd angular-resource

我无法使angular.resource.js与angular.js一起使用。 Angular已加载,但似乎angular.resource不是。

的index.html

<!doctype html>
<html>
    <head>
        <script>
          var require = {
            shim: {
              angular: {
                exports: "angular"
              },
              "angular.resource": {
                deps: [ "angular" ]
              }
            }
          };
        </script>
        <script src="require.js"></script>
    </head>
    <body>
        <div ng-controller="TagsController">
            Example
        </div>
        <script>
            require( ["TagsInit"] );
        </script>
    </body>
</html>

TagsInit.js

define([
    "angular",
    "angular.resource",
], function( angular ) {
    var module = angular.module( "app.customer", [] );

    module.controller( "TagsController", function( $scope, tagsService ) {
        console.log( "TagsController executed" );
    });
    module.service( "tagsService", function( $resource ) {
        console.log( "TagsService executed" );
    });

    angular.bootstrap( document.body, [ "app.customer" ] );
});

我认为它与垫片配置有关,但我没有意识到:

shim: {
    angular: {
        exports: "angular"
    },
    "angular.resource": {
        deps: [ "angular" ]
    }
}

使用AngularJS v1.3.0-beta.2和angular.resource(相同版本)。

我明白了:

Error: [$injector:unpr] Unknown provider: $resourceProvider <- $resource <- tagsService
http://errors.angularjs.org/1.3.0-beta.2/$injector/unpr?p0=%24resourceProvider%20%3C-%20%24resource%20%3C-%20tagsService

2 个答案:

答案 0 :(得分:1)

您应该在ngResource参数中添加app.customer模块作为requires模块的依赖项:http://docs.angularjs.org/api/ng/function/angular.module

var module = angular.module( "app.customer", ["ngResource"] );

答案 1 :(得分:0)

当然你必须传递'ngResource'作为角度模块的依赖!

  

var module = angular.module(“app.customer”,['ngResource']);

AMD不会破坏AngularJS的依赖系统。

恕我直言,使用带有AngularJS的requirejs是一个坏主意...因为你使用它的好处很少。只有脚本订单插入,而不是模块化,因为Angular采用自己的系统来管理模块。

希望它有所帮助。