angularjs – 文件夹结构,登录设计,路由和grunt任务
我目前正在开发一个新项目,我想给它一个良好的开端,不要搞砸未来的迭代.
描述 申请将有两个方面: 它们中的每一个都有单独的API,我将它们分成2个应用程序似乎是合乎逻辑的. 我的想法 在阅读了很多关于这个主题的主题后,我正在考虑使用这个结构: app/ admin/ home/ home.tpl.html // admin home template admin.html // admin index,including templates via ng-view admin-api.js // admin api admin.js // admin app admin-login/ home/ home.tpl.html admin-login.html admin-login-api.js admin-login.js client/ home/ home.tpl.html client.html client-api.js client.js client-login/ home/ home.tpl.html client-login.html client-login-api.js client-login.js css/ fonts/ img/ js/ libs/ 为什么要将登录与其他登录分开?因为我希望登录页面更轻(我不会加载相同的CSS / JS文件),并且如果用户没有登录则无法访问其他文件/视图. 路由 如果我们将路由映射到此结构,它将提供如下内容: /登录 /管理/ /管理/登入 身份验证条件示例: / 咕噜声的任务 我将使用grunt-useref主要在一组常见的JS / CSS文件上执行自动concat和uglify. 例: <!-- build:js js/scripts.<%= pkg.version %>.min.js --> <!-- jQuery --> <script src="libs/jquery/jquery-1.11.1.js"></script> <!-- AngularJS --> <script src="libs/angularjs/angular.js"></script> <script src="libs/angularjs/angular-route.js"></script> <script src="libs/angularjs/angular-resource.js"></script> <!-- Our main application --> <script src="app/app.js" ></script> <!-- endbuild --> 目标是有一个地下室,然后在路线改变时(通过延迟加载)在其顶部添加其他JS / CSS文件. 关注 首先,我在这里学习并分享想法,所以我希望你对我所做的事情有所了解. 我想不处理这个服务器端,是否可以使用.htaccess或顶级Angular App? 更新1 我终于来到另一种方式来构建我的文件夹结构: app/ admin/ home/ home.html // admin home view login/ login.html // admin login view login-api.html // admin login API login.js // admin login module admin.html // admin index,including templates via ng-view admin-api.js // admin api admin.js // admin module client/ // same goes for the client home/ home.tpl.html login/ login.html login-api.html login.js client.html client-api.js client.js common/ common.js // shared module app.js // main application,routing to the other pages based on Auth css/ fonts/ img/ js/ libs/ locale/ index.html index.html将提供我的主应用程序(app.js),它将根据用户登录状态提供正确的模板. 我的目标是异步加载css和js文件,只有当前路由所需的文件. app / app.js(草稿) /* * app/app.js * * Our main application,handling routes * and lazy loading other modules / scripts * */ var app = angular.module('app',[ 'ngRoute','ngResource','ngTouch','ngAnimate' ]); /* * App configuration * */ app.config( ['$routeProvider','$locationProvider',function( $routeProvider,$locationProvider ) { $locationProvider.hashPrefix('!'); /* * Checks if a user is authorized to access a route * * @role (string) minimum role name required * */ var requireAuth = function ( role ) { return { load: function ( $q,$location ) { console.log('Can user access route?'); var deferred = $q.defer(),// TODO: replace isLoggedIn variable value by a function // to check if the user is actually logged in isLoggedIn = true; deferred.resolve(); if ( isLoggedIn === true ) { // fire $routeChangeSuccess console.log('authorized'); return deferred.promise; } else { // fire $routeChangeError console.log('rejected'); $location.path('/login'); } } }; }; // Main application routes $routeProvider .when('/',{ templateUrl : 'app/client/home/home.html',resolve : requireAuth() }) .when('/login',{ templateUrl : 'app/client/login/login.html',resolve : requireAuth('anonymous') }) .when('/admin/',{ templateUrl : 'app/admin/home/home.html',resolve : requireAuth('admin') }) .when('/admin/login',{ templateUrl : 'app/admin/login/login.html',resolve : requireAuth('anonymous') }) .otherwise('/',resolve : requireAuth() }); }]); 更新2 经过更多的测试和研究,我想如果没有服务器端处理主要路由,我将无法做到这一点…… 主要问题 >我没有找到在其他应用程序中包含应用程序的正确方法 我的第一个结论 我绝对需要4个应用程序(客户端,客户端登录,管理员和管理员登录),因此他们每个人都有自己的路由,他们自己的主要index.html模板,因此,他们将真正独立于彼此. 他们每个人仍然可以访问常见的concat / minified文件,但他们也会加载自己的一堆文件. 解决方法
在我看来,你的第一个结论是正确的思考方式:)
登录页面不应显示任何AngularJS api.所以thay应该只有一个小的JS文件来处理AJAX postand显示错误消息.您的真实业务代码应仅在身份验证后可用. 这样你的应用程序将有两个主要文件app.js(客户端,管理员) 您的文件结构很好,但是当您的应用程序变得越来越大时,您可以在每个模块子目录中创建:控制器,指令,过滤器,服务.我不建议将所有控制器保存在一个文件中(仅当它们很短时),但是当你的应用程序开发时,保持干净的dir结构可以帮助很多. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- unix – 使用本地环境中的变量执行单行ssh命令
- 如果定义了Option,则用于在链中应用函数的惯用Scala
- 使用Scala将org.apache.spark.mllib.linalg.Vector RDD转换
- twitter-bootstrap – x-editable(twitter bootstrap):如何
- bootstrap兼容IE9
- Scala – Co / Contra-Variance应用于隐式参数选择
- pb9 调用webservices的入门例子
- 让人相见恨晚的vim插件:模糊查找神器LeaderF
- 在Scala中,静态值初始化似乎在调用main方法之前不会发生
- scala – 使用Enumerator编写函数