角度代码结构的最佳实践

时间:2013-12-02 15:04:47

标签: javascript angularjs

问题是我不知道Angular.JS中是否可以将每个单独的代码实体(控制器,模型,服务等)放在单独的.js文件中。我现在正试图以这种方式实现我的解决方案,但这感觉不对。

示例:

step.js内容(模型原型):

(function() {
    var moduleStep = angular.module('step', []);
    moduleStep.config(function() {
        var defaults = {
            title: "",
            enabled: true,
            active: false,
            visited: false,
            viewUrl: "/clientTemplates/notification/step1.html",
            model: {}
        };

        /**
         * @param {string} title
         * @param {string} viewUrl
         * @param {object} model   [optional]
         * @constructor
         */
        moduleStep.Step = function(title, viewUrl, model) {
            _.extend(this, defaults);
            this.title = title;
            this.viewUrl = viewUrl;
            _.isUndefined(model) && (this.model = model);
        };
        var prot = moduleStep.Step.prototype;

        /**
         * @returns {boolean}
         */
        prot.isValid = function () {
            return true;
        }
    });
}());

masterController.js内容(控制器):

(function() {
    var moduleController = angular.module('masterController', [
        'ui.bootstrap',
        'step',
        'config'
    ]);

    moduleController.config(function() {
            var Step = angular.module('step').Step;

            /**
             * @type {Array}
             */
            $scope.steps = [
                new Step("step 1", "/clientTemplates/notification/step1.html"),
                new Step("step 2", "/clientTemplates/notification/step2.html", {test2: 2}),
                new Step("step 3", "/clientTemplates/notification/step3.html", {test: 1})
            ];
        };
        controller.$inject = ['$scope'];

        moduleController.masterController = controller;
        console.log(moduleController.masterController);
    });
}());

setupMaster.js(应用程序模块)

(function() {
    var app = angular.module('setupMaster', [
//    'ngRoute',
        //controllers
        'masterController',
        'config'
    ]);


    /**
     * Конфигурационная функция для провайдеров служб приложения
     */
    app.config(['$controllerProvider', '$httpProvider', function($controllerProvider, $httpProvider) {
        $controllerProvider.register('MasterController', angular.module('masterController').masterController);
    }]);
}());

http://docs.angularjs.org/guide/module

在“推荐设置”块中,写入了4个大模块应该用于服务,指令,过滤器和应用层。控制器或模型工厂/原型怎么样?

也许只是我愚蠢或与Angular的范例不兼容,但Angular中的模块和注射器系统似乎有点过度设计和反直觉。虽然我真的很喜欢Angular的双向数据绑定和脏检查而不是回调。

2 个答案:

答案 0 :(得分:0)

我一直在努力寻找最佳实践和理由。除了阅读有角度的文档,其他文​​章..我发现JohnPapa's描述和深入的解释提供了更多的洞察力为什么以及为什么不是,做和不做。别' TS。 Read it here

像其他人建议的那样,检查角度种子和其他ng生成器等。最终,您可以适应随着时间推移而发展的正确实践。

没有任何权利或错误,因为它们都有有效点。即。可测性,依赖注入,缩小,优化等。

只是分享..

答案 1 :(得分:0)

我正在使用w11k Fabs,这是一个基本的grunt设置,包含livereload / jshint / sass,less / testing / nnotnotate ......

设置是面向视图/路径的。意味着视图/路线处于分层结构中。对于每个视图/路由新模块和ctrl文件。 fabs处理将它们链接到索引文件中。由于服务在多个视图中使用,因此它们存储在单独的文件夹中。

如果你" grunt dist"你的项目一切都缩小为1个文件。

尝试:https://www.npmjs.com/package/fabs