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

折腾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" />

  2. <!--引入所需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><!-- 新闻控制器 -->

  3. app.js--模块配置,根控制器
    1. 配置模块依赖包 angular.module(项目名,{依赖库,自定义的控制器,服务});
    2. 根控制器,目前只用于rootScope一些全部属性管理(.$on()不知道是不是angularjs绑定事件的机制还是mobile-angularui的绑定,先mark吧)
    /**
     * 配置模块和依赖包
     */
    var app = angular.module(‘guetonline‘, [
      ‘ngRoute‘,
      ‘newsControllers‘,
      ‘services‘,
      ‘mobile-angular-ui‘,
      ‘mobile-angular-ui.gestures‘
    ]);
    
    /**
     * 根控制器
     */
    app.controller(‘RootController‘, function($rootScope){
    
      // 路由改变开始
      $rootScope.$on(‘$routeChangeStart‘, function(){
        // 修改loading属性,显示加载等待条
        $rootScope.loading = true;
      });
    
      // 路由改变结束
      $rootScope.$on(‘$routeChangeSuccess‘, function(){
        // 修改loading属性,隐藏加载等待条
        $rootScope.loading = false;
      });
    });

  4. 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

      /**
       * 配置路由
       */
      app.config([‘$routeProvider‘,function($routeProvider) {
        $routeProvider.when(‘/‘,{templateUrl: ‘index/home‘, reloadOnSearch: false, controller: ‘HomeController‘});//主页
        $routeProvider.when(‘/news/view/:newsId‘, {templateUrl: ‘news/view‘, reloadOnSearch: false, controller: ‘NewsViewController‘});//新闻详情页
        $routeProvider.otherwise({redirectTo:‘/‘});//其余hash都定位到首页
      }]);
      
      /**
       * 配置静态变量
       */
      app.constant(‘API‘, {
        url: ""
      });

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

  1. 配置新闻控制器(C)-》调用service(M),请求数据-》路由配置模板(V)-》列表(VM)
    1. 新闻控制器 news_controller.js
    2. ‘use strict‘;
      
      /* Controllers */
      //定义angular模块(只有定义了才能在app.js中作为依赖包引入)
      var newsControllers = angular.module(‘newsControllers‘, []);
      
      //====================================定义新闻模块控制器里面的方法,即每个页面的控制器
      
      /**
       * 首页新闻列表
       */
      newsControllers.controller(‘HomeController‘, [‘$scope‘, ‘$rootScope‘, ‘newsService‘, function($scope, $rootScope, newsService){
      
        // 获取并赋值新闻列表
        $scope.list = newsService.getList();
      }]);
      
      /**
       * 新闻详情页
       */
      newsControllers.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);
            }
        });
      }]);

    3. 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/,但是还有很多功能需要添加

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

时间: 2025-01-15 09:50:36

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

小蚂蚁学习微信公众平台开发(3)--获取token,绑定微信号,自定义菜单,事件响应demo

这个教程的基础篇和提升篇都看完了,总感觉有点隔靴挠痒的感觉,讲的东西我都懂,没有吸收多少新鲜的知识.貌似还没有我这个一年前写的脚本好呢,估计也是照顾新人吧.期待高级篇的讲解,不过现在高级篇估计还在录制当中,所以对微信公众平台开发的学习就先到这里吧. 下面介绍一下我很久以前写的这个脚本.基本上常用的几个功能都有了,access_token的获取,用户的微信号和公司的账号的绑定,查询公司服务器上的资料,自定义表单什么.不过随着水平的提高,现在返回头来看,确实有很多的不足,比较最明显的就是token获

微信公众平台开发教程(四) 实例入门:机器人(附源码)

微信公众平台开发教程(四) 实例入门:机器人(附源码) 上一篇文章,写了基本框架,可能很多人会觉得晕头转向,这里提供一个简单的例子来予以说明,希望能帮你解开谜团. 一.功能介绍 通过微信公众平台实现在线客服机器人功能.主要的功能包括:简单对话.查询天气等服务. 这里只是提供比较简单的功能,重在通过此实例来说明公众平台的具体研发过程.只是一个简单DEMO,如果需要的话可以在此基础上进行扩展. 当然后续我们还会推出比较复杂的应用实例. 二.具体实现 1.提供访问接口 这里不再赘述,参照上一章,微信公

微信公众平台开发之会员卡

微信公众平台开发之会员卡是商家获取用户信息和实现线上线下交易的重要途径之一.通过在微信上发布会员卡,然后让用户填写自己的个人信息之后就可以领取到线上的会员卡,这个会员卡在线下也是可以使用的.可以在会员卡上发布一些最新通知,礼品券,优惠券,会员特权等等,用户达到一定的积分或者在线下消费一定的金额才可以领取这些优惠,这样可以吸引用户去获取积分实现每日签到的功能,这样用户就能看到我们推送的消息.下面就由微时代来简单介绍一下会员卡吧: 1.在微时代后台设置会员卡的回复信息,当用户回复关键词"会员卡&qu

[050] 微信公众平台开发入门视频教程已发布

2014年4月26日晚8点,我在CSDN社区在线培训课堂讲解了微信公众平台开发入门的相关知识,受到广大网友的一致好评,在此非常感谢大家的支持!课程结束后,很多网友表示由于报名人数限制.临时有事等原因,未能参加,希望能够提供录制视频的观看地址.视频教程的主要内容包括: 1.移动APP发展趋势(Native APP.Web APP.Light APP) 2.微信公众平台基础知识(服务号/订阅号.公众账号注册的注意事项.微信认证) 3.开发模式的使用(启用开发模式.接收与响应消息.回复文本/图文/音乐

微信公众平台开发基础知识38问

最近接触微信公众号后台的开发,看了一些资料基本可以满足简单的需求开发.笔者将这些问题及解答整理出来,以帮助更多初学者少走弯路. 1.订阅号与服务号的主要区别是什么? 订阅号每天能群发一条消息,没有自定义菜单及高级接口权限(目前 个人.企业订阅号关联腾讯微博认证之后才有自定义菜单):服务号有自定义菜单微信认证之后有高级接口权限,但每月只能群发一条消息. 2.到底该申请订阅号还是服务号? 申请哪种类型的公众账号,主要取决于账号的用途.服务号主要面向企业和组织,旨在为用户提供服务:订阅号主要面向媒体和

微信公众平台开发教程新手解惑40则

[编者按]由CSDN和<程序员>杂志联合主办的 2014年微信开发者大会 将于8月23日在北京举行,邀请了来自于一线的微信开发商技术负责人或资深工程师从企业应用开发高级篇.智能客服与LBS.微信支付.微信上的HTML5社交应用.微信小店开发等角度为与会者带来实战分享( 议程 ).目前报名处于优惠票价阶段,通过申请加入CSDN CTO俱乐部即可享受8折购票价格(票款中均含午餐),在8月1日前完成付款的同学还将免费获赠微信开发图书一本(两选一,活动现场发放).  值得一提的是,CSDN优秀博主.畅

微信公众平台开发教程第1篇-新手解惑

1.订阅号与服务号的主要区别是什么?订阅号每天能群发一条消息,没有自定义菜单及高级接口权限(目前 个人.企业订阅号关联腾讯微博认证之后才有自定义菜单):服务号有自定义菜单微信认证之后有高级接口权限,但每月只能群发一条消息. 2.到底该申请订阅号还是服务号?申请哪种类型的公众账号,主要取决于账号的用途.服务号主要面向企业和组织,旨在为用户提供服务:订阅号主要面向媒体和个人,旨在为用户提供信息和资讯. 3.订阅号是否支持编程开发?不管是订阅号,还是服务号,在高级功能中都有编辑模式和开发模式,订阅号也

[052] 微信公众平台开发视频公开课第2讲-自定义菜单开发讲解

微信公众平台开发视频公开课第2讲将为大家讲解自定义菜单的相关知识,时间是2014年5月24日20:00-22:00.本次课程的大纲如下: 1.自定义菜单简介 1)如何获得菜单权限 2)菜单按钮分类(click和view) 2.编辑模式下的菜单使用 1)创建菜单 2)预览发布 3)注意事项 3.开发模式下的菜单使用 1)菜单接口介绍 2)如何发起https请求(两种方法,IBM JDK环境) 3)获取access_token 4)如何封装菜单结构 5)创建菜单 6)处理菜单点击事件 7)菜单的查询

微信公众平台开发笔记

从寒假自己就開始拿微信公众平台开发当练手,到如今断断续续已经挺久了,仅仅只是忙于其它事写代码的时间还是非常少,但总体的框架已经搭起来了.公众微信号就不用给了,我不求粉,仅仅是来总结一下技术问题,再拖非常多东西都忘掉了.= = 粗略算了一下,代码量已经接近 2000 行,可是提取出来的技术问题好像没多少....囧...只是好歹也码了这么多,做个纪念也是应该的....O(∩_∩)O哈哈~ 1. SAE 数据库的连接.须要主机名和port,以后的使用是一样的. @ $db = new mysqli(S