项目结构(pd-成本系统)

每个页面对应的view分别在views, css/views/,js/views/下建立自己对应的命名目录,

router里配置如下:

.state('sample', {
                    //abstract: true,
                    url: '/sample',
                    views:{
                        'content': {
                            templateUrl: '../views/sample_module_view/sample_view.html',
                            controller:"sampleViewCtrl",
                            controllerAs:"vCtrl"
                        },
                        "right":{
                            templateUrl: '../views/blank_right.html',
                        },
                        "modal":{
                            templateUrl:"../views/blank_modal.html"
                        }
                    },
                    // support to load more controllers, services, filters, ...
                    dependencies: ['views/sample_module_view/sample_view_index'],
                    resolve: {
                        load:function(){
                            var url="../views/blank.css";
                            //_loadCss(url);
                        },
                        //todo:这里service分块有bug,目前解决方案是写appServies下的公共模块,实现渲染前加载
                        preloadData:function(dataPreloadService){
                            return dataPreloadService.getData("name")
                        }

                    }
                })//state main

注意: dependencies: ['views/sample_module_view/sample_view_index'], 把依赖的js,在dependencies里注入实现懒加载。

css懒加载推荐在页面引用,如果自定义样式比较大,可以在resolve里配置load, _loadCss(url)预加载。

<!-- 推荐页面加载对应css-->
<link rel="stylesheet" href="../static/css/views/sample_module_view/sample_view.css">
<div>
    <h3>view</h3>
    <h5>{{vCtrl.name}}</h5>
</div>

js/views/sample_module_view,js的自定义涉及到controller,service,自定义directive,filter以及第三方插件,便于管理,在目录中增加一个{module_name}_index.js的依赖入口,router>states里dependecies只引用{module_name}_index.js.

//{module_name}_view_index.js

define(["js/main/app","./sample_view","./services","./controllers"],function(app){
    app.useModule('myApp.sampleView')
});

{module}_view.js用于定义页面命名的module

//{module_name}_view.js

define(["angular"],function(angular){

    var viewModule=angular.module('myApp.sampleView', []);
    return viewModule;
});

页面对应的controller,service统一以{module}_view.js命名的module作为命名空间

//{module_name}_controllers.js

define(["angular",'./sample_view',"./services"],function(angular,viewModule){

    viewModule.controller('sampleViewCtrl', ["$rootScope","$scope","$timeout","$state", "$stateParams","sampleViewService","preloadData",
        function($rootScope,$scope,$timeout,$state,$stateParams,sampleViewService,preloadData) {
            var self=this;
            console.log("preload data--------------------------");
            console.log(preloadData);
            console.log("preload data--------------------------");

            this.name="Sample View";
            function _cb(data){
                console.log(".....");
                console.log(data);
            }
            sampleViewService.getData("",_cb)
        }]);

});

results matching ""

    No results matching ""