http://897371388.iteye.com/blog/1975351

大致思路也就是下面,由于最近在学Laravel也在学Angularjs,加上之前做的项目用到了d3。

原来的方案如下:

jQuery+highchart.js+Django

jQuery主要于ajax,以及Json解析详情可见:http://api.phodal.com

现在的方案就变成了

Laravel+Angularjs+D3+Bootstrap

效果可见:www.xianuniversity.com/athome

最后效果图如下所示:

代码可见:https://github.com/gmszone/learingphp

框架简介

Laravel

Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
开发应该是一个创造性的过程, 让你你享受,而不是让你很痛苦的事情。

Angular

AngularJS 是一个为动态WEB应用设计的结构框架。它能让你使用HTML作为模板语言,通过扩展HTML的语法,让你能更清楚、简洁地构建你的应用组件。它的创新点在于,利用数据绑定和依赖注入,它使你不用再写大量的代码了。这些全都是通过浏览器端的Javascript实现,这也使得它能够完美地和任何服务器端技术结合。

不过,一开始是考虑ember js,不喜欢谷歌学术化的东西。只是ember js的体积暂时让我失去了兴趣。。

D3

D3 是最流行的可视化库之一,它被很多其他的表格插件所使用。它允许绑定任意数据到DOM,然后将数据驱动转换应用到Document中。你可以使用它用一个数组创建基本的HMTL表格,或是利用它的流体过度和交互,用相似的数据创建惊人的SVG条形图。

Bootstrap

Bootstrap是Twitter推出的一个用于前端开发的开源工具包。它由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是一个CSS/HTML框架。

 

一个又一个的开源组合起来,形成了巨大的优势。就是对热门的技术感兴趣。。。(转载自Phodal's Blog)

创建RESTful

这个也就是由Lavarel来完成了。

  1. php artisan migrate:make create_athomes_table

打开对就的table进行修改,代码大致如下

  1. <?php
  2. use Illuminate\Database\Schema\Blueprint;
  3. use Illuminate\Database\Migrations\Migration;
  4. class CreateAthomesTable extends Migration {
  5. /**
  6. * Run the migrations.
  7. *
  8. * @return void
  9. */
  10. public function up()
  11. {
  12. Schema::create('athomes', function(Blueprint $table)
  13. {
  14. $table->increments('id');
  15. $table->float('temperature');
  16. $table->float('sensors1');
  17. $table->float('sensors2');
  18. $table->boolean('led1');
  19. $table->timestamps();
  20. });
  21. }
  22. /**
  23. * Reverse the migrations.
  24. *
  25. * @return void
  26. */
  27. public function down()
  28. {
  29. Schema::drop('athomes');
  30. }
  31. }

还需要在models下添加一个class

  1. <?php
  2. class Athomes extends Eloquent {
  3. protected $table = 'athomes';
  4. }

添加到routes.php

  1. Route::get('/athome/{atid}',function($atid){
  2. $atdata=Athomes::where('id','=',$atid)
  3. ->select('id','temperature','sensors1','sensors2','led1')
  4. ->get();
  5. return Response::json($atdata);
  6. });

再为其创建一个页面

  1. Route::get('/athome',function(){
  2. $maxid=Athomes::max('id');
  3. return View::make('athome')->with('maxid',$maxid);
  4. });

添加两个seeds

  1. class AthomesTableSeeder extends Seeder
  2. {
  3. public function run()
  4. {
  5. Athomes::create(array(
  6. 'temperature'=>'19.8',
  7. 'sensors1'=>'22.2',
  8. 'sensors2'=>'7.5',
  9. 'led1'=>False
  10. ));
  11. Athomes::create(array(
  12. 'temperature'=>'18.8',
  13. 'sensors1'=>'22.0',
  14. 'sensors2'=>'7.6',
  15. 'led1'=>False
  16. ));
  17. }
  18. }

然后,

  1. php artisan migrate
  2. php artisan db:seed

这样我们就完成了REST的创建

打开/athome/1看有没有出现相应的json数据

添加Angularjs

开始之前我们需要修改angularjs,默认的{{我选择了喜欢的<%,修改代码如下

  1. var myApp = angular.module('myApp', [], function($interpolateProvider) {
  2. $interpolateProvider.startSymbol('<%');
  3. $interpolateProvider.endSymbol('%>');
  4. });

让我们用一个简单的例子来测试下是否工作。

  1. function FetchCtrl($scope, $http, $templateCache) {
  2. $scope.method = 'GET';
  3. $scope.url = '<?= url('/athome/1') ?>';
  4. $scope.code = null;
  5. $scope.response = null;
  6. $http({method: $scope.method, url: $scope.url, cache: $templateCache}).
  7. success(function(data, status) {
  8. $scope.status = status;
  9. $scope.data = data;
  10. $.each(data,function(key,val){
  11. sensorsData.push(val.sensors1);
  12. })
  13. }).
  14. error(function(data, status) {
  15. $scope.data = data || "Request failed";
  16. $scope.status = status;
  17. log.l("Request Failed");
  18. });
  19. }

HTML代码

  1. <div id="App1" ng-app="myApp" ng-controller="FetchCtrl">
  2. <pre>http status code: <%status%></pre>
  3. <pre>http response data: <%data%></pre>
  4. </div>

至于为什么会写一个id="App1"是因为会出现一个id="App2",也就是两个angularjs的App,需要在第二个下面添加:

  1. angular.bootstrap(document.getElementById("App2"),['chartApp']);

那么效果应该如下所示:

http status code: 200
http response data: [{"id":1,"temperature":19.799999237061,"sensors1":22.200000762939,"sensors2":7.5,"led1":0}]

或如下图所示

D3

我们最后用来产生数据的部分。
这里依赖于https://github.com/n3-charts/line-chart 这个库。
故而比较简单
  1. var app = angular.module('chartApp', ['n3-charts.linechart']);
  2. app.controller('MainCtrl', function($scope, $http, $templateCache) {
  3. $scope.click=function(){
  4. $scope.options = {lineMode: 'cardinal',series: [{y: 'value', label: '温度', color: 'steelblue'}]};
  5. $scope.data=[{x:0,value:12}];
  6. $scope.url = '<?= url('/athome') ?>';
  7. $scope.url=$scope.url+'/'+{{$maxid}};
  8. log.l($scope.url);
  9. $scope.method = 'GET';
  10. $http({method: $scope.method, url: $scope.url, cache: $templateCache}).
  11. success(function(data, status) {
  12. $.each(data,function(key,val){
  13. $scope.data.push({x:1,value:val.sensors1});
  14. $scope.data.push({x:2,value:val.sensors2});
  15. log.l($scope.data);
  16. })
  17. }).
  18. error(function(data, status) {
  19. $scope.data = data || "Request failed";
  20. log.l("Request Failed");
  21. });
  22. }
  23. });

HTML代码如下:

  1. <div id="App2" ng-controller="MainCtrl">
  2. <button ng-click="click()" class="btn btn-success"><span class="glyphicon glyphicon-refresh"></span> Star
  3. 获取数据</button>
  4. <linechart data='data' options='options'></linechart>
  5. </div>
补充:里面使用了bootstrap框架

【转】Laravel+Angularjs+D3打造可视化数据,RESTful+Ajax的更多相关文章

  1. 动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题

    动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题 D3 ...

  2. Laravel 中使用 JWT 认证的 Restful API

    Laravel 中使用 JWT 认证的 Restful API 5天前/  678 /  3 / 更新于 3天前     在此文章中,我们将学习如何使用 JWT 身份验证在 Laravel 中构建 r ...

  3. 4- vue django restful framework 打造生鲜超市 -restful api 与前端源码介绍

    4- vue django restful framework 打造生鲜超市 -restful api 与前端源码介绍 天涯明月笙 关注 2018.02.20 19:23* 字数 762 阅读 135 ...

  4. Charted – 自动化的可视化数据生成工具

    Charted 是一个让数据自动生成可视化图表的工具.只需要提供一个数据文件的链接,它就能返回一个美丽的,可共享的图表.Charted 不会存储任何数据.它只是获取和让链接提供的数据可视化. 在线演示 ...

  5. 可视化数据包分析工具-CapAnalysis

    可视化数据包分析工具-CapAnalysis 我们知道,Xplico是一个从pcap文件中解析出IP流量数据的工具,本文介绍又一款实用工具-CapAnalysis(可视化数据包分析工具),将比Xpli ...

  6. [翻译] 使用ElasticSearch,Kibana,ASP.NET Core和Docker可视化数据

    原文地址:http://www.dotnetcurry.com/aspnet/1354/elastic-search-kibana-in-docker-dotnet-core-app 想要轻松地通过许 ...

  7. laravel数据库查询返回的数据形式

    版本:laravel5.4+ 问题描述:laravel数据库查询返回的数据不是单纯的数组形式,而是数组与类似stdClass Object这种对象的结合体,即使在查询构造器中调用了toArray(), ...

  8. 【转】Python——plot可视化数据,作业8

    Python——plot可视化数据,作业8(python programming) subject1k和subject1v的形状相同 # -*- coding: utf-8 -*- import sc ...

  9. [Python] Python 学习 - 可视化数据操作(一)

    Python 学习 - 可视化数据操作(一) GitHub:https://github.com/liqingwen2015/my_data_view 目录 折线图 散点图 随机漫步 骰子点数概率 文 ...

随机推荐

  1. 十六进制数'\0x'和'\x'有什么区别?(转)

    区别不大,都是把数按16进制输出. \0x:当输出的数转换为16进制只有1位时,在前面补0,如 0a,其它情况按照实际情况输出. \x:按照输出数转换为16进制的实际位数输出. 此外,小写x和大写X也 ...

  2. HDU 2819 — Swap 二分匹配

    Swap Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  3. 调整linux的时钟

    想把linux时钟调整的正常了. 网上找了找资料,找到了同步办法: http://blog.51yip.com/server/1474.html 即使用: sudo yum install ntp s ...

  4. 3.PopupWindow 、拍照、裁剪

    实现这样的效果 圆角图片的自定义控件直接拷进来,和com一个等级 想要弹出内容可以使用悬浮窗 layout_pupup <LinearLayout xmlns:android="htt ...

  5. 最短路(Bellman_Ford) POJ 3259 Wormholes

    题目传送门 /* 题意:一张有双方向连通和单方向连通的图,单方向的是负权值,问是否能回到过去(权值和为负) Bellman_Ford:循环n-1次松弛操作,再判断是否存在负权回路(因为如果有会一直减下 ...

  6. Codeforces 219D Choosing Capital for Treeland(树形DP)

    题目是给一张边有向的树形图.要选出首都的点,首都要都能走到其他点,因此要反转一些边的方向.问可以选哪几个点作为首都,使它们所需反转边的数量最少. 这题挺好想的,因为做过HDU2196. 首先就不妨设正 ...

  7. Codeforces 86C Genetic engineering(AC自动机+DP)

    题目大概是给几个DNA片段,求构造一个长度n的字符串的方案数,要求这个字符串每个位置的字符都属于某个包含于此字符串的DNA片段. 把那些DNA片段建一个AC自动机.考虑状态的表示: dp[len][x ...

  8. HDU2204 Eddy's爱好(容斥原理)

    题目问[1,n]有几个数是$m^k (k>1)$形式. 如果这样考虑,m已知k未知,对于每一个m统计其k的数量即$\lfloor log_mn \rfloor$个,再容斥,然而m太多了,完全不可 ...

  9. BZOJ4120 : [Baltic2015]Editor

    活跃区的操作序列的优先级单调不上升,所以每次undo的一定是一段区间. 以优先级为权值建立可持久化权值线段树,维护优先级在某区间内的最靠后的位置. #include<cstdio> con ...

  10. 移动WEBAPP开发常规CSS样式总结

    我所使用到的HTML页面标签: Section,div,artical,p,ol,ul,li,header,footer,span,form,input,label,h1,h2,h3 :详细说明我就不 ...