GVKun编程网logo

Oracle 数据显示 横表转纵表(oracle横表转竖表)

4

关于Oracle数据显示横表转纵表和oracle横表转竖表的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于.netDapper实践系列(3)---数据显示(Layui+Ajax+Dappe

关于Oracle 数据显示 横表转纵表oracle横表转竖表的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于.net Dapper 实践系列 (3) --- 数据显示 (Layui+Ajax+Dapper+MySQL)、.NET MVC 学习笔记(三)— MVC 数据显示、4、AngularJS2 数据显示、Angular2 学习笔记 (三) Angular2 数据显示等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

Oracle 数据显示 横表转纵表(oracle横表转竖表)

Oracle 数据显示 横表转纵表(oracle横表转竖表)

横表转纵表亦可用与decode意义相似的case语句实现,原理同该语句,这里不再过多描述。

1.建表
代码如下:
-- Create table
create table test
(
dm1 char(3),
dm2 char(3),
mc1 nvarchar2(20),
val nvarchar2(20)
)

2.填入数据如下:

3.转换语句:
代码如下:
select dm1,dm2,sum(decode(mc1,''c1'',val)) c1,sum(decode(mc1,''c2'',val)) c2,sum(decode(mc1,''c3'',val)) c3
from test
group by dm1,dm2

注:该语句是在val为数值的情况下的执行方法,如果val不为数值型,或者包含字符串等类型的话,运用sum会报错,这里可以采用另外一个方法,将sum改为max即可,语句如下:
代码如下:
select dm1,dm2,max(decode(mc1,''c1'',val)) c1,max(decode(mc1,''c2'',val)) c2,max(decode(mc1,''c3'',val)) c3
from test
group by dm1,dm2

此外,横表转纵表亦可用与decode意义相似的case语句实现,原理同该语句,这里不再过多描述。

.net Dapper 实践系列 (3) --- 数据显示 (Layui+Ajax+Dapper+MySQL)

.net Dapper 实践系列 (3) --- 数据显示 (Layui+Ajax+Dapper+MySQL)

[toc]

写在前面


上一小节,我们使用 Dapper 里事务实现了一对多关系的添加。这一小节,主要记录如何使用 Dapper 实现多表的查询显示。

产生问题


在 mvc 控制器中查询显示以 JsonResult 返回 Json 格式给前台时。无可避免的日期格式不是我们想要的日期格式。而是类似于这样的 / Date (1565664248000)/ 日期格式。

解决方案


  • 方案 1 可以使用 Newtonsoft.Json 里 IsoDateTimeConverter 类格式化 ISO 格式的日期
//使用IsoDateTimeConverter 类必须引用一下两个方法
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

public string Load(){
    //此处省略获取数据方法

    //最后返回sring
    IsoDateTimeConverter timeFormat = new IsoDateTimeConverter();
    timeFormat.DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
    return JsonConvert.SerializeObject(result, Formatting.Indented, timeFormat);
}

其中 result 就是返回给前台的字符串。不过,需要注意的是使用方法 1 时,前台必须转成 Json 对象。

  • 方案 2 仍然使用的是 JsonResult 的方法返回 Json。不过,我们需要拓展 JsonResult 类。
  • 在 DbOption 文件夹中,创建 my.JsonMvc 类。
namespace my.JsonMvc
{
   public static class MvcExtendsion
    {
        public static JsonResult MyJson(object data, JsonRequestBehavior behavior, string format)
        {
            return new ToJsonResult
            {
                Data = data,
                JsonRequestBehavior = behavior,
                FormatString = format
            };
        }

        public class ToJsonResult : JsonResult
        {
            const string error = "该请求已被封锁,因为敏感信息透露给第三方网站,这是一个GET请求时使用的。为了可以GET请求,请设置JsonRequestBehavior AllowGet。";
            /// <summary>
            /// 格式化字符串
            /// </summary>
            public string FormatString { get; set; }
            public override void ExecuteResult(ControllerContext context)
            {
                if (context == null)
                {
                    throw new ArgumentNullException("context");
                }
                if (JsonRequestBehavior == JsonRequestBehavior.DenyGet &&
                    String.Equals(context.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase))
                {
                    throw new InvalidOperationException(error);
                }

                HttpResponseBase response = context.HttpContext.Response;

                if (!String.IsNullOrEmpty(ContentType))
                {
                    response.ContentType = ContentType;
                }
                else
                {
                    response.ContentType = "application/json";
                }
                if (ContentEncoding != null)
                {
                    response.ContentEncoding = ContentEncoding;
                }
                if (Data != null)
                {
                    JavaScriptSerializer serializer = new JavaScriptSerializer();
                    string jsonstring = serializer.Serialize(Data);
                    string p = @"\\/Date\(\d+\)\\/";
                    MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);
                    Regex reg = new Regex(p);
                    jsonstring = reg.Replace(jsonstring, matchEvaluator);
                    response.Write(jsonstring);
                }
            }

            /// <summary>
            /// 将Json序列化的时间由/Date(1294499956278+0800)转为字符串
            /// </summary>
            private string ConvertJsonDateToDateString(Match m)
            {
                string result = string.Empty;
                string p = @"\d";
                var cArray = m.Value.ToCharArray();
                StringBuilder sb = new StringBuilder();

                Regex reg = new Regex(p);
                for (int i = 0; i < cArray.Length; i++)
                {
                    if (reg.IsMatch(cArray[i].ToString()))
                    {
                        sb.Append(cArray[i]);
                    }
                }
                DateTime dt = new DateTime(1970, 1, 1);
                dt = dt.AddMilliseconds(long.Parse(sb.ToString()));
                dt = dt.ToLocalTime();
                result = dt.ToString(FormatString);
                return result;
            }
        }
    }
}
  • 然后,在控制器中引用拓展的类。
using my.JsonMvc;//引用拓展类

public JsonResult Load()
{
    //此处省略获取数据方法
    
    //最后返回Json
    return MvcExtendsion.MyJson(result, JsonRequestBehavior.AllowGet, "yyyy-MM-dd HH:mm:ss");
}

最后,我选择了方案 2 解决了格式化日期的问题。

以下是完整的多表查询代码。

  • BorrowBookController 控制器中 创建 index 视图
/// <summary>
/// 创建添加视图
/// </summary>
/// <returns></returns>
public ActionResult Add()
{
    return View();
}

  • 创建 Load_Borrow_Data 方法
//<summary>
//获取借书数据
//</summary>
//<returns></returns>
//splitOn 读取Reader 从右到左
public JsonResult Load_Borrow_Data()
{
     using (var conn = ConnectionFactory.MysqlConn())
     {
          string sql_query = "select a.book_Id,a.book_Num,a.book_Name,a.book_Desc,a.borow_Time, ";
          sql_query += "b.book_Type_id,b.book_Type_Name,c.user_name";
          sql_query += " from sys_Borrow_Book a join sys_Book_Type b on a.book_Type_id=b.book_Type_id left join sys_Borrow_User c ";
          sql_query += " on a.user_Id=c.user_Id ";

           var result = conn.Query<sys_Borrow_Book, sys_Book_Type, sys_Borrow_User, sys_Borrow_Book>(sql_query,
            (books, bkys, users) =>
             {
                   books.borrow_types = bkys;
                   books.borrow_users = users;
                   return books;
              }, splitOn: "book_Type_Name,user_name").ToList();
          return MvcExtendsion.MyJson(result, JsonRequestBehavior.AllowGet, "yyyy-MM-dd HH:mm:ss");
      }
}
  • View 视图中创建 index 视图
<div class="layui-container">
    <div class="layui-row">
        <h2 style="margin-top:10px;">借书列表</h2>
        <hr class="layui-bg-green">
        <button class="layui-btn layui-btn-sm" id="btnAdd"><i class="layui-icon">&#xe608;</i> 新增</button>
        <div class="layui-col-md12">
            <table class="layui-table"  id="bind_tb">
                <thead>
                    <tr>
                        <th>序号</th>
                        <th>书籍类型</th>
                        <th>借书编号</th>
                        <th>借书书名</th>
                        <th>借书人</th>
                        <th>借书时间</th>
                        <th>操作</th>
                    </tr>
                </thead>
            </table>
        </div>
    </div>
</div>
  • index 视图中操作 dom
<script type="text/javascript">
    Load();
    /*1.获取数据*/
    function Load() {
        $.ajax({
            url: "../BorrowBook/Load_Borrow_Data",
            type: "Get",
        }).done(function (msg) {
            var str_tb = "";
            $("#bind_tb tr:gt(0)").remove();
            debugger;
            if ($.isEmptyObject(msg) == false) {
                $.each(msg, function (i, obj) {
                    str_tb += "<tr>";
                    str_tb += "<td>" + (i + 1) + "</td>";
                    str_tb += "<td>" + obj.borrow_types.book_Type_Name + "</td>";
                    str_tb += "<td>" + obj.book_Num + "</td>";
                    str_tb += "<td>" + obj.book_Name + "</td>";
                    str_tb += "<td>" + obj.borrow_users.user_name + "</td>";
                    str_tb += "<td>" + obj.borow_Time + "</td>";
                    str_tb += "<td><buttonlayui-btn layui-btn-normal layui-btn-xs btnedit'' id=" + obj.book_Type_id + "><ilayui-icon''>&#xe642;</i>编辑</button>";
                    str_tb += "<buttonlayui-btn layui-btn-danger layui-btn-xs btndel'' id=" + obj.book_Id + "><ilayui-icon''>&#xe640;</i>删除</button></td>";
                    str_tb += "</tr>";
                });
                $("#bind_tb").append(str_tb);
            } else {
                //$("#bind_tb tr:gt(0)").remove();
                var str_error = "<tr><td colspan=''7''text-align:center;''>暂无数据</td></tr>";
                $("#bind_tb").append(str_error);
            }
        }).fail(function (e) { });
    }
</script>

最终效果:

.NET MVC 学习笔记(三)— MVC 数据显示

.NET MVC 学习笔记(三)— MVC 数据显示

.

NET MVC 学习笔记(三)—— MVC 数据显示

       在目前做的项目中,用的最多的数据展示控件就是table展示(说不是的请走开,不是一路人),以下详细阐述下table的使用方法。

先看效果:

上图中包含两个部分,上面的是检索区域,下面部分是数据显示区域。检索区域不做讨论,主要看数据显示部分。

数据显示部分包含三部分:【功能按钮】、【数据表】、【分页信息】

功能按钮:是关于数据的操作,新增,删除等

数据表:显示数据

分页信息:对查询的数据进行分页显示,包括前端分页和服务器分页两种,这里我们用服务器端分页,提高检索速度

这里介绍数据表的加载功能。

页面加载过程中,数据表显示初始化:

页面部分代码:

<divid="toolbar">
                    <div>
                        <button type="button"id="btnAdd">新增会员</button>
                    </div>
                    <div>
                        <button type="button"id="btnDelete">删除会员</button>
                    </div>
                    <div>
                        <button type="button"id="btnDownloadTemplate">下载模板</button>
                    </div>
                    <div>
                        <label>
                            <input id="btnSelectData" type="file" name="file" accept="application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet">
                            <span>导入会员</span>
                        </label>
                    </div>
                </div>
                <div>
                    <table id="tb_Client"></table>
                </div>

  JS代码:

$(function () {
        //1.初始化Table
        var oTable = new TableInit();
        oTable.Init();

        //2.初始化Button的点击事件
        var oButtonInit = new ButtonInit();
        oButtonInit.Init();
    });

  

var TableInit = function () {
        var oTableInit = new Object();
        //初始化Table
        oTableInit.Init = function () {
            $(''#tb_Client'').bootstrapTable({
                url: ''@Url.Content("~/Client/GetClientList")'',        //请求后台的URL(*)
                method: ''post'',                      //请求方式(*)
                toolbar: ''#toolbar'',                //工具按钮用哪个容器
                striped: false,                      //是否显示行间隔色
                cache: false,                       //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
                pagination: true,                   //是否显示分页(*)
                sortable: false,                     //是否启用排序
                sortOrder: "asc",                   //排序方式
                queryParams: oTableInit.queryParams,//传递参数(*)
                sidePagination: "server",           //分页方式:client客户端分页,server服务端分页(*)
                pageNumber: 1,                       //初始化加载第一页,默认第一页
                pageSize: 10,                       //每页的记录行数(*)
                pageList: [10, 25, 50, 100],        //可供选择的每页的行数(*)
                search: false,                       //是否显示表格搜索,此搜索是会员端搜索,不会进服务端,所以,个人感觉意义不大
                strictSearch: true,
                showColumns: false,                  //是否显示所有的列
                showRefresh: false,                  //是否显示刷新按钮
                minimumCountColumns: 2,             //最少允许的列数
                clickToSelect: true,                //是否启用点击选中行
                uniqueId: "Id",                     //每一行的唯一标识,一般为主键列
                showToggle: false,                    //是否显示详细视图和列表视图的切换按钮
                cardView: false,                    //是否显示详细视图
                detailView: false,                   //是否显示父子表
                columns: [{
                    checkbox: true
                }, {
                    field: ''CardNo'',
                    name: ''CardNo'',
                    align: table_align,
                    title: ''会员卡号''
                }, {
                    field: ''UserName'',
                    name: ''UserName'',
                    align: table_align,
                    title: ''会员名''
                }, {
                    field: ''Sex'',
                    name: ''Sex'',
                    align: table_align,
                    title: ''性别''
                }, {
                    field: ''Birthdate'',
                    name: ''Birthdate'',
                    align: table_align,
                    title: ''出生日期'',
                    //获取日期列的值进行转换
                    formatter: function (value, row, index) {
                        return changeDateFormat(value, "YYYY-MM-DD")
                    }
                }, {
                    field: ''Phone'',
                    name: ''Phone'',
                    title: ''手机号'',
                    align: table_align
                }, {
                    field: ''Address'',
                    name: ''Address'',
                    title: ''地址'',
                    align: table_align
                }, {
                    field: ''Score'',
                    name: ''Score'',
                    title: ''积分'',
                    align: table_align
                }, {
                    field: ''GradeText'',
                    name: ''GradeText'',
                    title: ''等级'',
                    align: table_align
                }, {
                    field: ''operate'',
                    title: ''编辑'',
                    align: ''center'',
                    events: operateEvents,
                    width: ''8%'',
                    formatter: operateFormatter
                }]
            });
        };

        //得到查询的参数
        oTableInit.queryParams = function (params) {
            var temp = {   //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的
                PageSize: params.limit,   //页面大小
                Offset: params.offset / params.limit + 1,  //页码
                CardNo: $("#txtCardNo").val(),
                UserName: $("#txtClientName").val(),
                Phone: $("#txtPhone").val()
            };
            return temp;
        };
        return oTableInit;
    };

    var ButtonInit = function () {
        var oInit = new Object();
        var postdata = {};

        oInit.Init = function () {
            //初始化页面上面的按钮事件
            $("#btnAdd")
                .click(function () {
                    $("#myModalLabel").text("新增会员");
                    var options = {
                        Id: "",
                        CardNo: "",
                        UserName: "",
                        Sex: "",
                        Birthdate: "",
                        Phone: "",
                        Address: "",
                        Score: "",
                        GradeCode: ""
                    };
                    setFormValue(options);
                    $(''#myClientModal'').modal();
                });
            $("#btnDelete")
                .click(function () {
                    removeRows();
                });
            $("#btnDownloadTemplate")
                .click(function () {
                    window.location.href = "@Url.Content("~/Content/ImportClientDataTemplate.xlsx")";
                });
        };

        return oInit;
    };

    function operateFormatter(value, row, index) {
        return [
            ''<ahref="javascript:void(0)" title="编辑">'',
            ''<i></i>'',
            ''</a>''
        ].join('''');
    }

    window.operateEvents = {
        ''click .edit'': function (e, value, row, index) {
            editRow(row);
        }
    };

  

// 表格数据对应方式
var table_align = "left";

//转换日期格式(时间戳转换为datetime格式)
function changeDateFormat(cellval, dateType) {
    var dateVal = cellval + "";
    if (cellval != null) {
        var date = new Date(parseInt(dateVal.replace("/Date(", "").replace(")/", ""), 10));
        var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
        var currentDate = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();

        var hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
        var minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
        var seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
        if (dateType == "YYYY-MM-DD") {
            return date.getFullYear() + "-" + month + "-" + currentDate;
        }
        else if (dateType == "YYYY-MM-DD HH:MM:SS") {
            return date.getFullYear() + "-" + month + "-" + currentDate + " " + hours + ":" + minutes + ":" + seconds;
        }
    }
}

  

 后台代码:

/// <summary>
/// 获取会员列表
/// </summary>
/// <param name="filter">查询条件</param>
/// <returns>会员列表</returns>
[HttpPost]
public JsonResult GetClientList(ClientFilter filter)
{
	// 检索条件
	filter.SortField = "CardNo ASC";
	filter.StartRowIndex = filter.Offset - 1;
	// get Client list
	var result = service.GetClientList(filter);
	var resObj = new TableData();
	foreach (var item in result)
	{
		resObj.total = item.Key;
		resObj.rows = item.Value;
	}
	return Json(resObj, JsonRequestBehavior.AllowGet);
}

ClientFilter.cs

namespace CRM.Entity
{
    /// <summary>
    /// create by: Pegasus
    /// Filter
    /// </summary>
    [Serializable]
    [DataContract]
    public class ClientFilter : ClientModel
    {
        #region Private Fields
        private String swhere;
        private String sortField;
        private Int32 startRowIndex;
        private Int32 maximumRows;
        private Int32 totalRows;
        private Int32 pageSize;
        private Int32 offset;


        private DateTime? birdateStart;

        private DateTime? birdateEnd;

        private DateTime? createDateTimeStart;

        private DateTime? createDateTimeEnd;

        private DateTime? updateDateTimeStart;

        private DateTime? updateDateTimeEnd;

        #endregion

        #region Attributes
        /// <summary>
        /// Special Property for "SQL Where" Component
        /// </summary>
        [DataMember]
        public String sWhere
        {
            set
            {
                swhere = value;
            }
            get
            {
                return swhere;
            }
        }

        /// <summary>
        /// Sort Field
        /// </summary>
        [DataMember]
        public String SortField
        {
            set
            {
                sortField = value;
            }
            get
            {
                return sortField;
            }
        }

        /// <summary>
        /// Start row index
        /// </summary>
        [DataMember]
        public Int32 StartRowIndex
        {
            get
            {
                return startRowIndex;
            }
            set
            {
                startRowIndex = value;
            }
        }

        /// <summary>
        /// Maximum return ows
        /// </summary>
        [DataMember]
        public Int32 MaximumRows
        {
            get
            {
                return maximumRows;
            }
            set
            {
                maximumRows = value;
            }
        }

        /// <summary>
        /// Total Rows
        /// </summary>
        [DataMember]
        public Int32 TotalRows
{
            get
            {
                return this.totalRows;
            }
            set
            {
                this.totalRows = value;
            }
        }

        /// <summary>
        /// Page Size 页面大小
        /// for bootstrap table
        /// </summary>
        [DataMember]
        public Int32 PageSize
        {
            get
            {
                return this.pageSize;
            }
            set
            {
                this.pageSize = value;
            }
        }

        /// <summary>
        /// Offset 页码
        /// for bootstrap table
        /// </summary>
        [DataMember]
        public Int32 Offset
        {
            get
            {
                return this.offset;
            }
            set
            {
                this.offset = value;
            }
        }


        /// <summary>
        /// Birdate
        /// </summary>
        [DataMember]
        public DateTime? BirdateStart
        {
            get
            {
                return this.birdateStart;
            }
            set
            {
                this.birdateStart = value;
            }
        }

        /// <summary>
        /// Birdate
        /// </summary>
        [DataMember]
        public DateTime? BirdateEnd
        {
            get
            {
                return this.birdateEnd;
            }
            set
            {
                this.birdateEnd = value;
            }
        }

        /// <summary>
        /// Create Date Time
        /// </summary>
        [DataMember]
        public DateTime? CreateDateTimeStart
        {
            get
            {
                return this.createDateTimeStart;
            }
            set
            {
                this.createDateTimeStart = value;
            }
        }

        /// <summary>
        /// Create Date Time
        /// </summary>
        [DataMember]
        public DateTime? CreateDateTimeEnd
        {
            get
            {
                return this.createDateTimeEnd;
            }
            set
            {
                this.createDateTimeEnd = value;
            }
        }

        /// <summary>
        /// Update Date Time
        /// </summary>
        [DataMember]
        public DateTime? UpdateDateTimeStart
        {
            get
            {
                return this.updateDateTimeStart;
            }
            set
            {
                this.updateDateTimeStart = value;
            }
        }

        /// <summary>
        /// Update Date Time
        /// </summary>
        [DataMember]
        public DateTime? UpdateDateTimeEnd
        {
            get
            {
                return this.updateDateTimeEnd;
            }
            set
            {
                this.updateDateTimeEnd = value;
            }
        }

        #endregion
    }
}
ClientModel是数据基类,对应数据库表的字段

TableData.cs
/// <summary>
    /// Table分页数据
    /// </summary>
    [Serializable]
    [DataContract]
    public class TableData
    {
        [DataMember]
        public Int32 total { get; set; }
        [DataMember]
        public dynamic rows { get; set; }
    }

  GetClientList方法:

/// <summary>
        /// 获取会员列表
        /// </summary>
        /// <returns></returns>
        public Dictionary<Int32, List<ClientDomain>> GetClientList(ClientFilter filter)
        {
            Dictionary<Int32, List<ClientDomain>> list = null;
            using (DBManager manager = this.GetDBManager())
            {
                list = dao.GetClientList(manager, filter);
            }
            return list;
        }

  通过dao.GetClientList方法获取分页数据,具体方法内容根据实际情况编写代码即可。

4、AngularJS2 数据显示

4、AngularJS2 数据显示

本章节我们将为大家介绍如何将数据显示到用户界面上,可以使用以下三种方式:

  • 通过插值表达式显示组件的属性
  • 通过 NgFor 显示数组型属性
  • 通过 NgIf 实现按条件显示

通过插值表达式显示组件的属性

要显示组件的属性,插值是最简单的方式,格式为:{{属性名}}

以下代码基于AngularJS2 TypeScript 环境配置来创建,你可以再该章节上下载源码,并修改以下提到的几个文件。

app/app.component.ts 文件:

import { Component } from '@angular/core';
@Component({
  selector: 'my-app',template: `
    <h1>{{title}}</h1>
    <h2>我喜欢的网站: {{mySite}}</h2>
    `
})
export class AppComponent {
  title = '站点列表';
  mySite = '菜鸟教程';
}

Angular 会自动从组件中提取 title 和 mySite 属性的值,并显示在浏览器中,显示信息如下:

注意:模板是包在反引号 (`) 中的一个多行字符串,而不是单引号 (')。

使用 ngFor 显示数组属性

我们也可以循环输出多个站点,修改以下文件:

app/app.component.ts 文件:

import { Component } from '@angular/core';
@Component({
  selector: 'my-app',template: '
    <h1>{{title}}</h1>
    <h2>我喜欢的网站: {{mySite}}</h2>
    <p>网站列表:</p>
    <ul>
      <li *ngFor="let site of sites">
        {{ site }}
      </li>
    </ul>
    '
})
 
export class AppComponent {
  title = '站点列表';
  sites = ['菜鸟教程','Google','Taobao','Facebook'];
  mySite = this.sites[0];
}

代码中我们在模板使用 Angular 的 ngFor 指令来显示 sites 列表中的每一个条目,不要忘记 *ngFor 中的前导星号 (*) 。。

修改后,浏览器显示如下所示:

实例中 ngFor 循环了一个数组, 事实上 ngFor 可以迭代任何可迭代的对象。

接下来我们在 app 目录下创建 site.ts 的文件,代码如下:

app/site.ts 文件:

export class Site {
  constructor(
    public id: number,public name: string) { }
}

以上代码中定义了一个带有构造函数和两个属性: id 和 name 的类。

接着我们循环输出 Site 类的 name 属性:

app/app.component.ts 文件:

import { Component } from '@angular/core';
import { Site } from './site';
 
@Component({
  selector: 'my-app',template: '
    <h1>{{title}}</h1>
    <h2>我喜欢的网站: {{mySite.name}}</h2>
    <p>网站列表:</p>
    <ul>
      <li *ngFor="let site of sites">
        {{ site.name }}
      </li>
    </ul>
    '
})
 
export class AppComponent {
  title = '站点列表';
  sites = [
      new Site(1,'菜鸟教程'),new Site(2,'Google'),new Site(3,'Taobao'),new Site(4,'Facebook')
      ];
  mySite = this.sites[0];
}

修改后,浏览器显示如下所示:

通过 NgIf 进行条件显示

我们可以使用 NgIf 来设置输出指定条件的数据。

以下实例中我们判断如果网站数 3 个以上,输出提示信息:修改以下 app.component.ts 文件,代码如下:

app/app.component.ts 文件:

import { Component } from '@angular/core';
import { Site } from './site';
 
@Component({
  selector: 'my-app',template: '
    <h1>{{title}}</h1>
    <h2>我喜欢的网站: {{mySite.name}}</h2>
    <p>网站列表:</p>
    <ul>
      <li *ngFor="let site of sites">
       {{ site.name }}
      </li>
    </ul>
    <p *ngIf="sites.length > 3">你有很多个喜欢的网站!</p>
    '
})
 
export class AppComponent {
  title = '站点列表';
  sites = [
      new Site(1,'Facebook')
      ];
  mySite = this.sites[0];
}

修改后,浏览器显示如下所示,底部多了个提示信息:

Angular2 学习笔记 (三) Angular2 数据显示

Angular2 学习笔记 (三) Angular2 数据显示

前几节是 Angular2 和 TypeScript 分开学的,以后准备边学 Angular2 遍学 TypeScript, 只有边学边用,才会更深刻的理解 TypeScript, 好,下面直奔主题

创建应用

前面我们已经介绍了如何安装 nodejs 和 angular-cli, 下面我们默认都已经安装了 angular-cli, 首先来创建一个名为 my-app 的应用

ng new my-app

等待几分钟后会创建好应用,现在我们将对应用进行自定义的修改以下文件

  • app.component.html (模板文件)
<h1></h1>
<h2>介绍: </h2>
<h2>我的技能:</h2>
方法一展示
<ul>
  <!--这里采用TypeScript语法遍历skills-->
  <li *ngFor="let skill of skills1">
    id:  ,名称: 
  </li>
</ul>
方法二展示
<ul class="show2">
  <!--这里采用TypeScript语法遍历skills-->
  <li *ngFor="let skill of skills2">
    id:  ,名称: 
  </li>
</ul>

<p *ngIf="skills1.length >= 3">哇,好厉害哦,你有三种以上技能!</p>
<p *ngIf="skills1.length < 3">您不到三种技能,加油哦!</p>

上面的和,title 和 introduction 为组件的变量,其实就是输出变量,当然是动态的了 (当变量变化自动更新页面),ngFor=”let skill of skills1” 代表循环变量 skills1,ngIf=”skills1.length >= 3” 同理是判断语句

  • 增加 skill.ts 文件
export class Skill {
  id: number;
  name: string;
  constructor(id: number, name: string) {
    this.id = id;
    this.name = name;
  }
}

这里出现了 export 关键词,只有 export 了,其他地方才可以 import,constructor 是构造方法,其实两个参数.

  • app.component.ts 文件如下
import { Component } from ''@angular/core'';
import { Skill } from ''./skill'';
@Component({
  selector: ''app-root'',
  templateUrl: ''./app.component.html'',
  styleUrls: [''./app.component.css'']
})
// export为导出类(如果想外部引用必须要求可导出,否则外部不可以导入),typescript语法
export class AppComponent {
  title = ''Angular2笔记'';
  introduction = ''我是一个Angular2新手'';
  skills1: Skill[] = [
    {id: 1, name: ''JAVA''},
    {id: 2, name: ''PHP''},
    {id: 3, name: ''Python''},
    {id: 4, name: ''JavaScript''},
    {id: 5, name: ''Others''}];

  // 必须要求有对应的构造方法
  skills2 = [
    new Skill(1, ''JAVA''),
    new Skill(2, ''PHP''),
    new Skill(3, ''Python''),
    new Skill(4, ''JavaScript''),
    new Skill(5, ''Others''),
  ];
}

上面我们初始化了四个变量,其中 title 和 introduction 为字符串类型,skills1 和 skills2 为数组类型,skills1: Skill [] 可以加类型也可以不加类型,不加类型代表松散类型对象,skills2 同样也可以规定类型.new Skill 代表创建对象并给定参数,上面已经给出具体构造方法.

  • app.component.css 我们为其增加模板样式
h1 {color: red}
h2 {font-size: large;}
.show2 {
  list-style-type: none ;
}
.show2 li {
  color: green;
}
  • app.component.spec.ts 为集成测试文件,暂时不用管它,只要不执行 test 就不会出错,或者我们删除相关的对

我们在命令行执行 ng s 就可以运行项目

项目运行时会出现 Loading… 英文字母,因为 angular2 渲染需要时间,所以会闪动,我们可以将其修改成自己喜欢的一些动画之类的来提高体验效果,其在 index.html 文件中

注意

我们要使用 import 的时候一定要 export 一下,否则无法使用

查看源代码

演示地址


如要转载,请保持本文完整,并注明作者 luamas 和本文原始地址:http://blog.luamas.com/2017/03/22/angular2-003-according-data/

关于Oracle 数据显示 横表转纵表oracle横表转竖表的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于.net Dapper 实践系列 (3) --- 数据显示 (Layui+Ajax+Dapper+MySQL)、.NET MVC 学习笔记(三)— MVC 数据显示、4、AngularJS2 数据显示、Angular2 学习笔记 (三) Angular2 数据显示等相关内容,可以在本站寻找。

本文标签: