1

我想使用这样的模块模式定义我的控制器:

    (function(ng, app) {

    // Controller constructor.
    function Controller($scope) {

        this.scope = $scope;
        this.scope.fmembers = [
             {
                 name: 'Member 1',
                 role: 'Head of Family',
                 age: 55
             },
             {
                 name: 'Member 2',
                 role: 'Brother of Head of Family',
                 age: 51
             }
        ];

        Controller.prototype = {

            getFMembers: function() {
                return this.scope;
            }
        };

        return( this );
    }

    // Define the Controller as the constructor function.
    app.controller('ftreeController', Controller );
})(angular, anmDesktop);

如果这样做,如何从模块中检索此控制器(ftreeController)?例如,我想在 app.config 的 routeprovider 中使用 freeController:

$routeProvider.when('/view2', {
    templateUrl: 'partials/partial2.html', 
    controller: ftreeController'
});

在上面描述的 routeprovider 中,我得到一个错误(ftreeController not defined ...)

谢谢你。

4

1 回答 1

2

我认为您的代码中有一些错误(例如缺少引号)是在发布帖子时出现的复制和粘贴错误。更正这些,这只是加载顺序的问题。

控制器必须在配置路由之前定义,并且您的应用程序必须在两者之前定义。我还将路线放在一个类似定义的文件中,以展示它如何大规模工作。

但是,如果没有像 AMD 这样的加载系统,我不确定您为什么选择以这种方式定义代码,但它起作用。

我创建了一个Plunker来展示它的工作原理。

需要记住的几件事:首先,Angular 中的控制器只是函数。我不确定您为什么创建范围的副本并将其添加为控制器对象的成员属性,也不知道为什么您在原型之外声明了控制器函数。由于 Angular 的依赖注入,该函数在运行时将拥有所需的一切,因此我们可以使用普通的、普通的 javascript 函数。在大多数 Angular 项目中,控制器的定义如下:

app.controller( 'myCtrl', function( $scope ) { 
    //... 
});
于 2013-01-05T06:58:24.790 回答