2

我将 angularAMD 与 requirejs 一起使用,当我尝试将 ng-table 模块提供给控制器时,我收到 Uncaught TypeError: Cannot read property 'module' of undefined from the ng-table 模块。错误来源:

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

我的代码是:

'use strict';

requirejs.config({
  paths: {
    'angular': ['../lib/angularjs/angular'],
    'angular-route': ['../lib/angularjs/angular-route'],
    'angularAMD': ['../lib/angularAMD/angularAMD'],
    'ng-table': ['../lib/ng-table/ng-table']
  },
  shim: { 'angularAMD': ['angular'], 'angular-route': ['angular'], 'ng-table': ['angular']}
});


define(['angularAMD', 'angular-route'], function (angularAMD) {
    var app = angular.module("meadApp", ['ngRoute']);

    app.config(function ($routeProvider) {
        $routeProvider
            .when("/results", angularAMD.route({
                templateUrl: 'partials/results.html', controller: 'resultsController', controllerUrl: './controllers/resultsController'
            }))
            .otherwise({redirectTo: "/results"});
    });

    return angularAMD.bootstrap(app);
});

结果控制器.js

define(['app', 'ng-table'], function (app) {
    app.controller('resultsController', function ($scope, $http) {    
            $scope.users = [
                {name: "Moroni", age: 50},
                {name: "Tiancum", age: 43},
                {name: "Jacob", age: 27},
                {name: "Nephi", age: 29},
                {name: "Enos", age: 34}
            ];    
    });
});

结果.html

<div>
    <table ng-table class="table">
        <tr ng-repeat="user in users">
            <td data-title="'Name'">{{user.name}}</td>
            <td data-title="'Age'">{{user.age}}</td>
        </tr>
    </table>
</div>
4

3 回答 3

2

制作 angular 垫片并导出 angular。像这样:

主.js:

requirejs.config({
  paths: {
    'angular': ['../lib/angularjs/angular'],
    'angular-route': ['../lib/angularjs/angular-route'],
    'angularAMD': ['../lib/angularAMD/angularAMD'],
    'ng-table': ['../lib/ng-table/ng-table']
  },
  shim: {
    'angular': { exports: 'angular' },
    'angularAMD': ['angular'],
    'angular-route': ['angular'],
    'ng-table': ['angular']}
});

我从这里发现了这个:https ://github.com/esvit/ng-table/pull/377#issuecomment-57934733


@marcoseu 的回答对我不起作用。我发现我也不需要ngloadRestangular,这是在 angular 引导后加载的另一个 3rd 方 angular 模块。我不知道这是怎么回事,我一定不明白。

于 2015-06-11T08:16:42.497 回答
1

加载现有的角度模块应该使用ngload. 添加ngload到您的main.js

requirejs.config({
  paths: {
    'ngload': ['../lib/angularAMD/ngload'],
    ...
  },
  shim: { 'ngload': ['angularAMD'], ...}
});

然后,使用它来加载ng-table

define(['app', 'ngload!ng-table'], function (app) {
    app.controller('resultsController', function ($scope, $http) {    
            $scope.users = [
                {name: "Moroni", age: 50},
                {name: "Tiancum", age: 43},
                {name: "Jacob", age: 27},
                {name: "Nephi", age: 29},
                {name: "Enos", age: 34}
            ];    
    });
});

有关更多详细信息,请参阅第 3 方 AngularJS 模块

于 2015-04-26T13:00:42.140 回答
-1

如果您在加载 require.js 配置之前加载了 angular.js。然后您需要在配置定义之前添加以下代码:

define('angular', function () {
    return angular;
});
于 2015-09-16T14:21:12.347 回答