Angular1.4.6框架简单读取数据库信息并渲染完成news新闻文章列表以及detail详情页功能(小试牛刀)

简介: Angular1.4.6框架简单读取数据库信息并渲染完成news新闻文章列表以及detail详情页功能(小试牛刀)

项目结构


css/angular-common.css


table tr td:first-child {

   /**背景图片*/

   width: 200px;

   height: 100px;

   /**居中填满*/

   background-repeat: no-repeat;

   background-position: center;

   background-size: cover;

}

a {

   text-decoration: none;

   cursor: pointer;

   border-bottom: 1px solid transparent;

}

a:hover {

   border-color: black;

}

.hasLink {

   pointer-events: auto;

   color: black;

   border-bottom: 1px solid black;

}

.hasLink:hover {

   color: blue;

   border-bottom: 1px solid blue;

}

.noLink {

   pointer-events: none;

   color: lightgray;

}

._active {

   background-color: red;

}


news.html


<!doctype html>

<html ng-app="app" ng-cloak>

<head>

   <meta charset="UTF-8">

   <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">

   <meta http-equiv="X-UA-Compatible" content="ie=edge">

   <title>Angular-新闻列表页</title>

   <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>

   <script src="js/public/k-app-common.js"></script>

   <script src="js/angular/angular.min.js"></script>

   <link rel="stylesheet" href="css/angular-common.css">

</head>

<body ng-controller="ctrl">

<div>

   <table>

       <tr ng-repeat="item in list">

           <td style="background-image: url({{item.pic}})"></td>

           <td>

               <h2>{{item.title}}</h2>

               <h3>{{item.content | stripHTML}}</h3>

           </td>

           <td>

               <a ng-href="detail.html?id={{item.id}}" target="_blank">查看详情</a>

           </td>

       </tr>

   </table>

</div>

</body>

<script src="js/news.js"></script>

</html>


js/news.js


/**angular post 请求*/

let url = 'http://your_ip:your_port/api/api_name'

const config = {

   headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'}, transformRequest: function (data) {

       return $.param(data);

   }

};

let app = angular.module('app', []);

app.controller('ctrl', function ($scope, $http) {

   $http.post(url, {start: 0, count: 6}, config).then((r) => {

       /* 请求成功执行代码*/

       /* alert(JSON.stringify(r.data))*/

       $scope.list = r.data.data

   }, (r) => {

       /* 请求失败执行代码*/

       alert(JSON.stringify(r))

   });

});

app.filter('stripHTML', function() {

   //可以注入依赖

   return function(c) {

       return c.stripHTML().substring(0, 30) + "...";

   }

});


detail.html


<!doctype html>

<html ng-app="app" ng-cloak>

<head>

   <meta charset="UTF-8">

   <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">

   <meta http-equiv="X-UA-Compatible" content="ie=edge">

   <title>Angular-详情页</title>

   <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>

   <script src="js/public/k-app-common.js"></script>

   <script src="js/angular/angular.min.js"></script>

   <script src="js/angular/angular-sanitize.min.js"></script><!--奇葩的angular,用个ng-bind-html还需要依赖angular-sanitize.min.js,真是日了狗了!!!-->

   <link rel="stylesheet" href="css/angular-common.css">

</head>

<body ng-controller="ctrl">

<div>

   <div>

       <h1>{{data.title}}</h1>

       <h6>{{data.date|format}}</h6>

       <p ng-bind-html="data.content"></p><!--如果不引入angular-sanitize.min.js,就会报错-->

   </div>

   <div>

       <a ng-href="{{data.prevHref}}" target="_self" ng-class="data.hasPrevLink?'hasLink':'noLink'">[上一篇] {{data.prevTitle}}</a><br>

       <a ng-href="{{data.nextHref}}" target="_self" ng-class="data.hasNextLink?'hasLink':'noLink'">[下一篇] {{data.nextTitle}}</a><br><br>

   </div>

</div>

</body>

</html>

<script src="js/detail.js"></script>


js/detail.js


let url = 'http://your_ip:your_port/api/api_name'

let detailId = hash.getQueryString("id");

detailId || alert("id参数获取失败");

const config = {

   headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'}, transformRequest: function (data) {

       return $.param(data);

   }

};

let app = angular.module('app', ['ngSanitize']);

app.controller('ctrl', function ($scope, $http) {

   $scope.data = {

       title: "加载中…",

       date: "",

       content: "加载中…",

       prevHref: "",

       prevTitle: "文章标题加载中…",

       nextHref: "",

       nextTitle: "文章标题加载中…",

       hasPrevLink: false,

       hasNextLink: false,

   };

   $http.post(url, {id: detailId}, config).then((r) => {

       /* 请求成功执行代码*/

       /* alert(JSON.stringify(r.data))*/

       r = r.data.data;

       document.title = r.title;

       $scope.data.title = r.title;

       $scope.data.date = r.date;

       $scope.data.content = r.content;

   }, (r) => {

       /* 请求失败执行代码*/

       alert(JSON.stringify(r))

   });

   $http.post(url, {}, config).then((r) => {

       /* 请求成功执行代码*/

       let arr = r.data.data;

       let len = arr.length;

       let id = parseInt(detailId);

       let index = parseInt(array.getIndexById(arr, id));

       if (index <= 0) {

           $scope.data.prevHref = "#";

           $scope.data.prevTitle = "没有了";

           $scope.data.hasPrevLink = false;

       } else {

           let _index_l = index - 1;

           $scope.data.prevTitle = arr[_index_l].title;

           $scope.data.prevHref = "detail.html?id=" + arr[_index_l].id;

           $scope.data.hasPrevLink = true;

       }

       if (index >= len - 1) {

           $scope.data.nextHref = "#";

           $scope.data.nextTitle = "没有了";

           $scope.data.hasNextLink = false;

       } else {

           let _index_n = index + 1;

           $scope.data.nextTitle = arr[_index_n].title;

           $scope.data.nextHref = "detail.html?id=" + arr[_index_n].id;

           $scope.data.hasNextLink = true;

       }

   }, function () {

       alert('接口请求失败!');

   });

});

app.filter('format', function () {

   //可以注入依赖

   return function (c) {

       if (c == "") return;

       return date.formatDateTime(c);

   }

});

相关文章
|
27天前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
214 2
|
2月前
|
应用服务中间件 PHP Apache
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
|
2月前
|
安全 算法 Java
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
本文提供了在数据库中对密码等敏感信息进行加盐加密的详细教程,包括手写MD5加密算法和使用Spring Security的BCryptPasswordEncoder进行加密,并强调了使用BCryptPasswordEncoder时需要注意的Spring Security配置问题。
145 0
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
|
3月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
156 5
|
4月前
|
SQL Java 数据库连接
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。通过映射机制,它可以自动处理对象与数据库表之间的转换,支持主流数据库,提高了代码的可移植性和可维护性。其核心接口包括 SessionFactory、Session 和 Transaction 等,通过它们可以执行数据库的 CRUD 操作。配置方面,需在项目中引入 Hibernate 及数据库驱动依赖,并创建 `hibernate.cfg.xml` 配置文件来设置数据库连接和 Hibernate 行为参数。
47 1
|
4月前
|
编解码 文字识别 算法
视觉智能开放平台产品使用合集之怎么查询人脸数据库列表
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
28 0
|
4月前
|
存储 安全 关系型数据库
"揭秘!如何设计数据库架构,让信息系统心脏强健无比?一场关于数据效率、安全与可扩展性的深度探索"
【8月更文挑战第19天】数据库架构是信息系统的核心,关乎数据存储效率与安全及应用性能和扩展性。优秀设计需综合考量业务需求、数据模型选择、查询优化、事务处理、安全性和扩展性。首先,深刻理解业务需求,如电商系统需高效处理并增长商品、订单等数据。其次,基于需求选择合适的数据模型,如关系型或非关系型数据库。再者,优化查询性能与索引策略以平衡读写负载。同时,考虑事务处理和并发控制以保证数据一致性和完整性。最后,加强安全性措施和备份恢复策略以防数据风险。通过这些步骤,可以构建稳健高效的数据库架构,支持系统的稳定运行。
42 0
|
4月前
|
druid Java 数据库连接
SpringBoot项目整合MybatisPlus持久层框架+Druid数据库连接池,以及实现增删改查功能
SpringBoot项目整合MybatisPlus和Druid数据库连接池,实现基本的增删改查功能。
359 0
|
16天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
29 1
|
18天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
31 4
下一篇
无影云桌面