AngularJS初体验

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 最近突然发现,Coding.net真是一个神奇的网站。这各网站90%的请求都是通过ajax完成的。可以发现,不管你点任何链接,网页都不会刷新,点击浏览器的返回或前进按钮也是这样,打开chrome的开发者工具的network面板可以看到大量的ajax请求被发出,每个ajax返回的只有数据,没有视图代码。

最近突然发现,Coding.net真是一个神奇的网站。这各网站90%的请求都是通过ajax完成的。可以发现,不管你点任何链接,网页都不会刷新,点击浏览器的返回或前进按钮也是这样,打开chrome的开发者工具的network面板可以看到大量的ajax请求被发出,每个ajax返回的只有数据,没有视图代码。对我这种才艺不精的人而言,真的觉得很神奇。

我是个比较喜欢研究新鲜事务的人,于是琢磨了一阵子。发现这个网站用到了一种技术-AngularJS。于是熬夜学了下这门神奇的技术。

AngularJS是一个基于MVC理念的JavaScript框架,它主要用来增强html语言,开发一些单页应用。

AngularJS比较重要的概念是 指令、控制器、表达式 。下面附上一段示例代码

 1 <?php
 2 /**
 3  * Created by PhpStorm.
 4  * User: lvyahui
 5  * Date: 15-5-5
 6  * Time: 下午1:22
 7  */
 8 ?>
 9 <html>
10 <head lang="en">
11     <meta charset="UTF-8">
12     <title></title>
13     <link rel="stylesheet" href="css/main.css"/>
14     <script src="js/angular-1.2.5.min.js"></script>
15 </head>
16 <body ng-app="">
17 <div ng-controller="customerController">
18     <input type="text" ng-model="uname"/>
19     <table>
20         <tr ng-repeat="x in names | filter:uname | orderBy : 'country'">
21             <!--注意这个是严格区分大小写-->
22             <td>{{x.uname | uppercase}}</td><td>{{x.country}}</td>
23         </tr>
24     </table>
25 </div>
26 <script>
27     function customerController($scope,$http){
28         $http.get('/mysql.php').success(
29             function(resp){
30                 console.log(resp);
31                 $scope.names = resp;
32             }
33         );
34     }
35 </script>
36 </body>
37 </html>

上面的用到的指令有

  • ng-app: 限定了AngularJS的作用域,带有这个节点的dom元素对应了AngularJS的根元素,一般一个页面只有一个ng-app,也可以有多个,但稍微麻烦一点,也没必要
  • ng-controller:指定了一个控制这个dom元素的控制器,实际是一个javascript对象,dom元素对应了对象中的$scope。
  • ng-model:指定了以个数据绑定,立即将输入绑定到以个js变量上,双向绑定
  • ng-repeat:指定以这个dom节点为模板迭代集合,这个集合会跟以个javascript变量绑定,这个变量可以是$scope的属性,一旦这个变量被改变,视图会马上更新反之亦然,这是双向绑定。

上面的td元素中以表达式的方式输出了几个的元素的属性,并且为元素添加了一个简单的大写过滤器,将uname全部转成大写输出,上面还定义了两个过滤器filter和orderBy,一个用来过滤输入,一个用来排序。

上面的script中定义了一个customer控制器。在这个控制器中请求了一个url,这个url将返回一个json对象,更确切的说是一个js数组。然后立马将响应赋值给names。这样之前ng-repeat绑定的变量就会马上重新渲染。

下面是mysql.php做的事情

 1 <?php
 2 /**
 3  * Created by PhpStorm.
 4  * User: lvyahui
 5  * Date: 15-5-5
 6  * Time: 下午1:33
 7  */
 8 
 9 header('Access-Control-Allow-Origin:*');
10 header('Content-Type:text/html;charset=UTF-8');
11 
12 $conn = new mysqli('localhost','root','root','mytestdb');
13 
14 
15 /*
16 $datas = json_decode(require_once('http.php'));
17 foreach($datas as $data){
18     $sql = 'insert into customers (uname,country) VALUES ("'.$data->Name.'","'.$data->Country.'")';
19     print_r($sql.'<br>');
20     $conn->query($sql);
21 }
22 $conn->close();
23 */
24 $results = $conn->query('select uname,country from customers');
25 $conn->close();
26 
27 $data = array();
28 
29 while($rs = $results->fetch_array(MYSQLI_ASSOC)){
30     $data[] = array(
31         'uname' => $rs['uname'],
32         'country' => $rs['country']
33     );
34 }
35 echo json_encode($data);

这里用到了数据库和一个数据文件http.php文件(这个文件是为了建立数据库里的数据的)

数据库

1 create database mytestdb default character set utf8 collate utf8_general_ci;
2 
3 
4 create table customers(
5     id int auto_increment primary key,
6     uname varchar(64) not null,
7     country varchar(64) not null
8 );

http.php数据文件

 1 <?php
 2 return '
 3 [
 4 {
 5 "Name" : "Alfreds Futterkiste",
 6 "City" : "Berlin",
 7 "Country" : "Germany"
 8 },
 9 {
10 "Name" : "Berglunds snabbköp",
11 "City" : "Luleå",
12 "Country" : "Sweden"
13 },
14 {
15 "Name" : "Centro comercial Moctezuma",
16 "City" : "México D.F.",
17 "Country" : "Mexico"
18 },
19 {
20 "Name" : "Ernst Handel",
21 "City" : "Graz",
22 "Country" : "Austria"
23 },
24 {
25 "Name" : "FISSA Fabrica Inter. Salchichas S.A.",
26 "City" : "Madrid",
27 "Country" : "Spain"
28 },
29 {
30 "Name" : "Galería del gastrónomo",
31 "City" : "Barcelona",
32 "Country" : "Spain"
33 },
34 {
35 "Name" : "Island Trading",
36 "City" : "Cowes",
37 "Country" : "UK"
38 },
39 {
40 "Name" : "Königlich Essen",
41 "City" : "Brandenburg",
42 "Country" : "Germany"
43 },
44 {
45 "Name" : "Laughing Bacchus Wine Cellars",
46 "City" : "Vancouver",
47 "Country" : "Canada"
48 },
49 {
50 "Name" : "Magazzini Alimentari Riuniti",
51 "City" : "Bergamo",
52 "Country" : "Italy"
53 },
54 {
55 "Name" : "North/South",
56 "City" : "London",
57 "Country" : "UK"
58 },
59 {
60 "Name" : "Paris spécialités",
61 "City" : "Paris",
62 "Country" : "France"
63 },
64 {
65 "Name" : "Rattlesnake Canyon Grocery",
66 "City" : "Albuquerque",
67 "Country" : "USA"
68 },
69 {
70 "Name" : "Simons bistro",
71 "City" : "København",
72 "Country" : "Denmark"
73 },
74 {
75 "Name" : "The Big Cheese",
76 "City" : "Portland",
77 "Country" : "USA"
78 },
79 {
80 "Name" : "Vaffeljernet",
81 "City" : "Århus",
82 "Country" : "Denmark"
83 },
84 {
85 "Name" : "Wolski Zajazd",
86 "City" : "Warszawa",
87 "Country" : "Poland"
88 }
89 ]
90 ';
数据文件

css样式

 1 table, th , td {
 2     border: 1px solid grey;
 3     border-collapse: collapse;
 4     padding: 5px;
 5 }
 6 table tr:nth-child(odd) {
 7     background-color: #f1f1f1;
 8 }
 9 table tr:nth-child(even) {
10     background-color: #ffffff;
11 }

最后的效果

在文本框里输内容可立即过滤结果

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
8天前
|
机器人 API 调度
基于 DMS Dify+Notebook+Airflow 实现 Agent 的一站式开发
本文提出“DMS Dify + Notebook + Airflow”三位一体架构,解决 Dify 在代码执行与定时调度上的局限。通过 Notebook 扩展 Python 环境,Airflow实现任务调度,构建可扩展、可运维的企业级智能 Agent 系统,提升大模型应用的工程化能力。
|
14天前
|
人工智能 数据可视化 Java
Spring AI Alibaba、Dify、LangGraph 与 LangChain 综合对比分析报告
本报告对比Spring AI Alibaba、Dify、LangGraph与LangChain四大AI开发框架,涵盖架构、性能、生态及适用场景。数据截至2025年10月,基于公开资料分析,实际发展可能随技术演进调整。
913 152
|
人工智能 前端开发 API
前端接入通义千问(Qwen)API:5 分钟实现你的 AI 问答助手
本文介绍如何在5分钟内通过前端接入通义千问(Qwen)API,快速打造一个AI问答助手。涵盖API配置、界面设计、流式响应、历史管理、错误重试等核心功能,并提供安全与性能优化建议,助你轻松集成智能对话能力到前端应用中。
651 154
|
负载均衡 Java 微服务
OpenFeign:让微服务调用像本地方法一样简单
OpenFeign是Spring Cloud中声明式微服务调用组件,通过接口注解简化远程调用,支持负载均衡、服务发现、熔断降级、自定义拦截器与编解码,提升微服务间通信开发效率与系统稳定性。
348 156
|
6天前
|
分布式计算 监控 API
DMS Airflow:企业级数据工作流编排平台的专业实践
DMS Airflow 是基于 Apache Airflow 构建的企业级数据工作流编排平台,通过深度集成阿里云 DMS(Data Management Service)系统的各项能力,为数据团队提供了强大的工作流调度、监控和管理能力。本文将从 Airflow 的高级编排能力、DMS 集成的特殊能力,以及 DMS Airflow 的使用示例三个方面,全面介绍 DMS Airflow 的技术架构与实践应用。
|
4天前
|
存储 Kubernetes Docker
部署eck收集日志到k8s
本文介绍基于ECK(Elastic Cloud on Kubernetes)在K8s中部署Elasticsearch、Kibana和Filebeat的完整流程。采用Helm方式部署ECK Operator,通过自定义YAML文件分别部署ES集群、Kibana及Filebeat,并实现日志采集与可视化。重点涵盖命名空间一致性、版本匹配、HTTPS配置禁用、资源限制、存储挂载及权限RBAC设置,支持系统日志、应用日志与容器日志的多源采集,适用于生产环境日志系统搭建。
243 94