首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >angularjs +需要量=参数‘控制器’不是一个函数,未定义

angularjs +需要量=参数‘控制器’不是一个函数,未定义
EN

Stack Overflow用户
提问于 2014-03-03 00:43:21
回答 2查看 3.6K关注 0票数 1

嗨,我正在尝试实现angularjs +需求,但我得到的参数'HelloWorld‘不是一个函数,当我进入所需的路径时,得到了未定义的错误。

app.js

代码语言:javascript
复制
require.config({
baseUrl: "",
paths: {
    'domReady': 'Scripts/RequireJs/dom-ready/domReady',
    "angular": "Scripts/AngularJs/angular",
    "angular-route": "Scripts/AngularJs/angular-route",
    "angular-resource": "Scripts/AngularJs/angular-resource",
},
shim: {
    "angular": {
        exports: "angular"
    },
    "angular-resource": {
        deps: ["angular"]
    },
    "angular-route": {
        deps: ["angular"]
    }
}
});

define('app', ['angular', 'angular-route'], function (angular) {
var app = angular.module('app', ['ngRoute']);
app.config(function ($routeProvider, $controllerProvider, $compileProvider, $filterProvider, $provide) {

    app.controllerProvider = $controllerProvider;
    app.compileProvider = $compileProvider;
    app.routeProvider = $routeProvider;
    app.filterProvider = $filterProvider;
    app.provide = $provide;

    $routeProvider.when('/home', {
        templateUrl: 'views/home.html',
        resolve: {
            load: ['$q', '$rootScope', function ($q, $rootScope) {
                var deferred = $q.defer();

                require(['App/home'], function () {
                    $rootScope.$apply(function () {
                        deferred.resolve();
                    });

                });
                return deferred.promise;
            }]
        }
    });
});

require(['domReady!'], function (document) {
    angular.bootstrap(document, ['app']);
});

return app;
});

home.js

代码语言:javascript
复制
require(['app'], function (app) {
app.controllerProvider.register('HelloWorld', function ($scope) {
    $scope.greet = function () {
        return 'Hello World!'
    }
});
});

home.html

代码语言:javascript
复制
<div ng-controller="HelloWorld">
    {{greet();}}
</div>

正如我所理解的,当我去/home角查找一个名为HelloWorld的控制器时,它找不到抛出参数'HelloWorld‘不是一个函数,如果没有定义,那么我的调试器就会在home.js中被击中,但是我在屏幕上看到的只是{greet();}}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-03 14:33:51

很少的事情:

1.理想情况下, require.config应该放置在main.js中,然后使用以下方法加载到index.html中:

代码语言:javascript
复制
<script data-main="js/main.js" src=".../require.js"></script>

2.尝试在路由中定义控制器并删除ng-controller home.html:

代码语言:javascript
复制
...
$routeProvider.when('/home', {
    templateUrl: 'views/home.html',
    controller: 'HelloWorld', // <-- Need to add this line
...

3.您的home.js应该使用define而不是require,因为您在这里定义一个模块。

为了方便使用RequireJS和AngularJS,我创建了以下项目,您应该看看:

https://github.com/marcoslin/angularAMD

票数 2
EN

Stack Overflow用户

发布于 2014-03-03 15:36:10

好的..。在我看来不错。也许你的'App/home‘应该是'app/home’,不知道你是如何定义你的'App‘的。以防它还不起作用。尝试在你的配置中添加'app‘。

我制作了你的东西的工作版本:https://github.com/guilbep/smallrequirejsangularseed

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22135789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档