检索使用模块模式定义的angularjs控制器

时间:2013-01-05 04:43:14

标签: angularjs

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

    (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未定义...)

谢谢。

1 个答案:

答案 0 :(得分:2)

您的代码中存在一些错误(例如缺少引号),我认为在发布帖子时会出现复制和粘贴错误。纠正这些,只需加载订单。

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

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

我创建了一个Plunker来证明它有效。

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

app.controller( 'myCtrl', function( $scope ) { 
    //... 
});