浅谈angularjs项目结构

angularjs ,主要是js中的结构,让人困惑,其中包括app.js,controllers.js,directive.js,filter.js,services.js和一些自己添加的文件,例如appUtils.js.

app中会将除自己添加的之外的js引入其中,此外还有一些使用的组件等,例如:

angular.module('starter', ['ionic', 'starter.controllers', 'starter.services','starter.filter','directive','ngCordova','angular-timeline','ngFileUpload'])

与app对应的是在各自js中,起的名字,例如:

angular.module('starter.controllers', ['ionic','ngCordova'])

与app并列的是自己添加的js文件,例如appUtils.js,

在appUtils.js中声明的变量是整个项目的全局变量,例如:

域名及端口号:var rootUrl="http://10.10.8.**:8087/****/";

登录人的身份标识:var token = localStorage.getItem('token');   ( localStorage.getItem('token');是angularjs中的广播机制,以后再说)

使用时就会方便很多,例如: return $http.get(rootUrl+'/answer/user/****.do?token='+token);

services中可以缓存页面数据,所以很多缓存功能可以放在services中写,但是写在services中的全局变量token不会发生变化(更换登录者之后,token因缓存问题不会变化),有效的方法就是将token在二次闭包中赋值,或者干脆放在appUtils声明最好(appUtils会在用户再次登录时覆盖掉token)。

directive文件会在页面加载时,仅加载一次。所以在新页面加载后会出现directive加载过早而早不到页面dom元素,这时可用$timeout()方法.

directive加载一次导致的bug:

1、当页面的入口有多个时(即底部多个导航页面都可进入到该页面),由于tab缓存,导致页面回退不完全时点击底部导航,路由不对

  解决方法,在appjs对应路由和有关页面跳转的地方删除tab。

2、删除tab后导致directive不会重新编译页面,例如返回按钮和一些写在directive中的组件失效

  原因:页面dom加载,但是未被编译,方法不可用,tab的作用就是在dom加载后完成对页面的编译。

  解决方法:每个页面入口,对应一个页面,多个相同页面调用统一模板

  

 

posted @ 2016-08-01 12:01  芒果有毒  阅读(1201)  评论(0编辑  收藏  举报