折腾angularjs的感悟

几天折腾,总的来说看了很多博客,要么不是最新的技术文档,要么写得不够完整,因为别人是基于他们的理解写的技术博客代码不一定会贴完整,所以一旦你用的是最新的想要看完整的实例就只能去官网查阅文档,现在通过实现下面的两个功能才真正了解什么是前端的MVVM框架。

另外,总结下我理解中的MVVM框架:后台php是MVC框架,一直做法是php处理数据,然后把数据渲染到模板,然后后台返回html页面给浏览器,

现在前端mvvm(model-view-viewmodel)就是:model接受后台数据(json),view接受后台静态模板,最后由angularjs执行model数据渲染到view中,展示viewmodel页面

简而言之就是,把原先后台渲染模板的部分交给浏览器的angularjs框架前端去执行

好处是:渲染工作放前台,减少服务器处理工作;只返回json数据,减少网络流量,这是手机端网页需求;angularjs局部加载界面;angularjs数据双向绑定,页面真正分离视图和数据处理

坏处是:要转换为前端处理,略不适应

angularjs框架使用配置和初始化

  1. 引入相关js,css

    <!--引入所需mobileangularui的相关css库,不熟悉具体css文件使用范围,照搬demo-->
    <link rel="stylesheet" href="<?=__PUBLIC__?>css/mobile-angular-ui-hover.min.css" />
    <link rel="stylesheet" href="<?=__PUBLIC__?>css/mobile-angular-ui-base.min.css" />
    <link rel="stylesheet" href="<?=__PUBLIC__?>css/mobile-angular-ui-desktop.min.css" />
    <link rel="stylesheet" href="<?=__PUBLIC__?>style/app.css" />
    <!--引入所需angular和ui的相关js库-->
    <script src="<?=__PUBLIC__?>js/angular.js"></script>
    <script src="<?=__PUBLIC__?>js/angular-route.js"></script><!--路由-->
    <script src="<?=__PUBLIC__?>js/angular-resource.js"></script><!--资源模型-->
    <script src="<?=__PUBLIC__?>js/mobile-angular-ui.min.js"></script><!--mobileangularui-->
    <!-- Required to use $swipe, $drag and Translate services -->
    <script src="<?=__PUBLIC__?>js/mobile-angular-ui.gestures.min.js"></script><!--mobileangularui 手势-->
    <!--引入项目相关js--> 
        <script src="<?=__PUBLIC__?>script/app.js"></script><!-- 模块配置,根控制器 -->
    <script src="<?=__PUBLIC__?>script/config.js"></script><!-- 路由,静态变量配置 -->
    <script src="<?=__PUBLIC__?>script/service.js"></script><!-- 服务 -->
    <script src="<?=__PUBLIC__?>script/news_controller.js"></script><!-- 新闻控制器 -->
  2. app.js--模块配置,根控制器
    1. 配置模块依赖包 angular.module(项目名,{依赖库,自定义的控制器,服务});
    2. 根控制器,应用初始化,目前只用于rootScope一些全部属性管理(.$on()不知道是不是angularjs绑定事件的机制还是mobile-angularui的绑定,先mark吧)
      'use strict';
      /**
      * 配置模块和依赖包
      */
      var myapp = angular.module('guetonline', [
      'ngRoute',
      'services',
      'mobile-angular-ui',
      'mobile-angular-ui.gestures'
      ]); /**
      * 应用初始化
      */
      myapp.run(['$rootScope', function($rootScope){
      // 路由改变开始
      $rootScope.$on('$routeChangeStart', function(){
      // 修改loading属性,显示加载等待条
      $rootScope.loading = true;
      }); // 路由改变结束
      $rootScope.$on('$routeChangeSuccess', function(){
      // 修改loading属性,隐藏加载等待条
      $rootScope.loading = false;
      });
      }]);
  3. config.js---angularjs路由,常量配置
    1. 路由是在第2步配置ngRoute依赖包
    2. angularjs推荐方法定义的写法 xxx.config([变量名列表字符串,function(变量名列表){…}])
    3. $routeProvider 是angularjs的依赖注入的变量之一,所以在angularjs主要别用$开头命名变量
    4. $routeProvider.when(hash路径, {templateUrl:’模板请求url’,controller: ’模板对应的控制器‘,reloadOnSearch: false})配置路由,折腾是controller一定要和templateUrl同时并存,没理解MVVM时候,还是以为用老思维去想怎么显示后台返回的页面,其实非也,现在必须要同事返回数据和模板,这里是掉坑了很久,一定要都有的属性
    5. 跟控制器只是把demo里面控制页面加载时的loadding样式加进来,angularjs的样式改变很神奇,这里只要改变一个属性<div class="app-body" ng-class="{loading: loading}">模板这样写,angular编译时候就判断loadding是否来显示loadding这个class
      'use strict';
      /**
      * 配置路由
      */
      myapp.config(['$routeProvider', '$locationProvider',function($routeProvider, $locationProvider) {
      var index = {templateUrl: 'index/home', reloadOnSearch: false},
      newsList = {templateUrl: 'news/list_tpl', reloadOnSearch: false, controller: 'NewsListController'},
      newsView = {templateUrl: 'news/view', reloadOnSearch: false, controller: 'NewsViewController'}; $routeProvider.when('/', index);//主页
      $routeProvider.when('/news', newsList);//新闻列表页
      $routeProvider.when('/news/:newsId', newsView);//新闻详情页 $routeProvider.otherwise({redirectTo:'/'});//其余hash都定位到首页 $locationProvider.html5Mode(!0).hashPrefix("!");//配置hash
      }]); /**
      * 配置静态变量
      */
      myapp.constant('API', {
      url: ""
      });

学校公告新闻列表,新闻详情(目前把学校公告新闻列表显示在首页)

  1. 配置新闻控制器(C)-》调用service(M),请求数据-》路由配置模板(V)-》列表(VM)
    1. 新闻控制器 news/controller.js

      'use strict';
      
      /* 控制器 */
      //====================================定义新闻模块控制器里面的方法,即每个页面的控制器 /**
      * 首页新闻列表
      */
      myapp.controller('NewsListController', ['$scope', '$rootScope', 'newsService', function($scope, $rootScope, newsService){ // 获取并赋值新闻列表
      $scope.list = newsService.getList();
      }]); /**
      * 新闻详情页
      */
      myapp.controller('NewsViewController', ['$scope', '$sce', '$rootScope', '$routeParams', 'newsService', function($scope, $sce, $rootScope, $routeParams, newsService){ // 获取新闻详情
      newsService.get( //由service定义的url
      {id:$routeParams.newsId, action:'view'},
      function(response){
      $rootScope.loading = false; //赋值新闻详情
      $scope.viewdata = response; //显示未转义的html,默认html被实体化
      $scope.trustAsHtml = function() {
      return $sce.trustAsHtml(response.news_content);
      }
      });
      }]);
    2. news/service.js定义新闻的service,定义数据请求的url并封装请求新闻列表数据
      'use strict';
      
      //定义angular模块(只有定义了才能在app.js中作为依赖包引入)
      //依赖ngResource包
      var services = angular.module('services', ['ngResource']); //.factory()工厂模式,具体还没深入了解学习,暂时跟着demo写
      services.factory(
      'newsService',
      ['$resource', '$routeParams', 'API',//控制器访问句柄
      function($resource, $routeParams, API){
      return $resource(
      API.url + '/news/:action/:id', //定义数据请求url
      {},
      {
      getList: {method:'GET', params:{action:'lists'},isArray:true}//新闻模型方法
      });
      }]
      );

至此一个简单的列表和详情就运用angularjs实现了,访问地址:http://jdhu.sinaapp.com/,但是还有很多功能需要添加

列表搜索,分页,详情页返回,评论

桂电在线_微信公众平台开发之-运用angularjs显示学校公告新闻列表和详情页面的更多相关文章

  1. 微信公众平台开发教程(一)_微信接入校验以及token获取

    微信公众平台是运营者通过公众号为微信用户提供资讯和服务的平台,而公众平台开发接口则是提供服务的基础. 接入微信公众平台开发,开发者需要按照如下步骤完成: 1.填写服务器配置 2.验证服务器地址的有效性 ...

  2. 第八篇 :微信公众平台开发实战Java版之如何网页授权获取用户基本信息

    第一部分:微信授权获取基本信息的介绍 我们首先来看看官方的文档怎么说: 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域 ...

  3. 微信公众平台开发教程--方培工作室,PHP语言版本

    准备工作 微信公众平台的注册 介绍如何注册一个微信公众账号. 入门教程 微信公众平台开发入门教程 内容:1.申请SAE作为服务器; 2.启用开发模式; 3.微信公众平台PHP SDK; 4.接收发送消 ...

  4. [转]抢先Mark!微信公众平台开发进阶篇资源集锦

    FROM : http://www.csdn.net/article/2014-08-01/2820986 由CSDN和<程序员>杂志联合主办的 2014年微信开发者大会 将于8月23日在 ...

  5. Senparc.Weixin.MP SDK 微信公众平台开发教程(二十一):在小程序中使用 WebSocket (.NET Core)

    本文将介绍如何在 .NET Core 环境下,借助 SignalR 在小程序内使用 WebSocket.关于 WebSocket 和 SignalR 的基础理论知识不在这里展开,已经有足够的参考资料, ...

  6. 微信公众平台开发(57)Emoji表情符号 【转发】

    微信公众平台开发(57)Emoji表情符号   微信公众平台开发 微信公众平台开发模式 企业微信公众平台 Emoji表情符号 作者:方倍工作室 地址:http://www.cnblogs.com/tx ...

  7. C# 微信公众平台开发(5)--添加图文素材

      微信公众平台开发 --添加素材 关于微信公众号素材管理,我们可以通过接口文档,了解基本详情:http://mp.weixin.qq.com/wiki/10/10ea5a44870f53d79449 ...

  8. Senparc.Weixin.MP SDK 微信公众平台开发教程(十八):Web代理功能

    在Senparc.Weixin.dll v4.5.7版本开始,我们提供了Web代理功能,以方便在受限制的局域网内的应用可以顺利调用接口. 有关的修改都在Senparc.Weixin/Utilities ...

  9. Senparc.Weixin.MP SDK 微信公众平台开发教程(十七):个性化菜单接口说明

    前不久微信上线了个性化菜单接口,Senparc.Weixin SDK也已经同步更新. 本次更新升级Senparc.Weixin.MP版本到v13.5.2,依赖Senparc.Weixin版本4.5.4 ...

随机推荐

  1. AVL树的左旋右旋理解 (转)

    AVL树是最先发明的自平衡二叉查找树.在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树.查找.插入和删除在平均和最坏情况下都是O(log n).增加和删除可能需要通过一次或多 ...

  2. 文件上传工具swfupload[转]

    转至:http://zhangqgc.iteye.com/blog/906419 文件上传工具swfupload 示例: 1.JavaScript设置SWFUpload部分(与官方例子类似): var ...

  3. PTA 07-图4 哈利·波特的考试 (25分)

    哈利·波特要考试了,他需要你的帮助.这门课学的是用魔咒将一种动物变成另一种动物的本事.例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等.反方向变化的魔咒就是简单地将原来的魔咒倒过来念 ...

  4. jmeter http get 登录

      登录页url:http://www.ablesky.com/login.do?fromurl=http%3A%2F%2Fwww.ablesky.com%2Findex.do 登录参数用firebu ...

  5. 简单了解View是What?

    Android UI界面架构 每个Activity包含一个PhoneWindow对象,PhoneWindow设置DecorView为应用窗口的根视图.在里面就是熟悉的TitleView和Content ...

  6. Java 线程池的原理与实现(转)

    这几天主要是狂看源程序,在弥补了一些以前知识空白的同时,也学会了不少新的知识(比如 NIO),或者称为新技术吧.线程池就是其中之一,一提到线程,我们会想到以前<操作系统>的生产者与消费者, ...

  7. 处理json中影响解析的多余引号

    在xml中,敏感字符是尖括号,在json中,敏感字符是引号,上文中我们介绍了如何处理xml中的敏感字符,本文说说如何处理json中的敏感字符. 思路与上文相同,不再赘述.直接上代码: json–> ...

  8. android开发之单点触摸

    相对于多点触摸,单点触摸还是很简单的. 新建一个工程,先看看布局文件: <RelativeLayout xmlns:android="http://schemas.android.co ...

  9. ListView simpleAdapter的基本使用

    使用simpleAdapter的数据用一般都是HashMap构成的List,list的每一节对应ListView的每一行.HashMap的每个键 值数据映射到布局文件中对应id的组件上.因为系统没有对 ...

  10. Go语言学习资料汇总

    网站: Go语言官网(访问)(中文镜像) Go语言中文网(访问) Go编译器(访问) Go语言中国社区(访问) golanghome(访问) GoLang中国(访问) Gopher Academic( ...