手机看网站,建设公司网站,建设工程施工合同2021,知名企业门户网站建设之——开发语言
目录
之——开发语言
杂谈
正文
1.TypeScript基础
1.1 基础类型 1.2 条件语句
1.3 函数
1.4 类
1.5 模块
1.6 迭代器
2.ArkTS
2.1 JAVA SCRIPT
2.2 TS
2.3 ArkTS
编辑
3.示例
3.1 概述性示例 3.2 自定义组件
3.3 渲染控制语法
3.4 状态管…之——开发语言
目录
之——开发语言
杂谈
正文
1.TypeScript基础
1.1 基础类型 1.2 条件语句
1.3 函数
1.4 类
1.5 模块
1.6 迭代器
2.ArkTS
2.1 JAVA SCRIPT
2.2 TS
2.3 ArkTS
编辑
3.示例
3.1 概述性示例 3.2 自定义组件
3.3 渲染控制语法
3.4 状态管理
4.more 杂谈 基础编程语言ArkTS。引用来自华为开发者课堂。 ArkTS是HarmonyOS优选的主力应用开发语言。它在TypeScript简称TS的基础上匹配ArkUI框架扩展了声明式UI、状态管理等相应的能力让开发者以更简洁、更自然的方式开发跨端应用。要了解什么是ArkTS我们首先要了解下ArkTS、TypeScript和JavaScript之间的关系 JavaScript是一种属于网络的高级脚本语言已经被广泛用于Web应用开发常用来为网页添加各式各样的动态功能为用户提供更流畅美观的浏览效果。TypeScript 是 JavaScript 的一个超集它扩展了 JavaScript 的语法通过在JavaScript的基础上添加静态类型定义构建而成是一个开源的编程语言。ArkTS兼容TypeScript语言拓展了声明式UI、状态管理、并发任务等能力。 正文
1.TypeScript基础
1.1 基础类型
TypeScript支持一些基础的数据类型如布尔型、数组、字符串等下文举例几个较为常用的数据类型我们来了解下他们的基本使用。语法let 变量名类型 赋值。
布尔值
TypeScript中可以使用boolean来表示这个变量是布尔值可以赋值为true或者false。
let isDone: boolean false;
数字
TypeScript里的所有数字都是浮点数这些浮点数的类型是 number。除了支持十进制还支持二进制、八进制、十六进制。
let decLiteral: number 2023;
let binaryLiteral: number 0b11111100111;
let octalLiteral: number 0o3747;
let hexLiteral: number 0x7e7;
字符串
TypeScript里使用 string表示文本数据类型 可以使用双引号 或单引号表示字符串。
let name: string Jacky;
name Tom;
name Mick;
数组
TypeScrip有两种方式可以定义数组。 第一种可以在元素类型后面接上 []表示由此类型元素组成的一个数组。第二种方式是使用数组泛型Array元素类型。
let list: number[] [1, 2, 3];
let list: Arraynumber [1, 2, 3];
元组
元组类型允许表示一个已知元素数量和类型的数组各元素的类型不必相同。 比如你可以定义一对值分别为 string和number类型的元组。
let x: [string, number];
x [hello, 10]; // OK
x [10, hello]; // Error
枚举
enum类型是对JavaScript标准数据类型的一个补充使用枚举类型可以为一组数值赋予友好的名字。
enum Color {Red, Green, Blue};
let c: Color Color.Green;
Unknown
有时候我们会想要为那些在编程阶段还不清楚类型的变量指定一个类型。这种情况下我们不希望类型检查器对这些值进行检查而是直接让它们通过编译阶段的检查。那么我们可以使用unknown类型来标记这些变量。
let notSure: unknown 4;
notSure maybe a string instead;
notSure false;
Void
当一个函数没有返回值时你通常会见到其返回值类型是 void。
function test(): void {console.log(This is function is void);
}
Null 和 Undefined
TypeScript里undefined和null两者各自有自己的类型分别叫做undefined和null。
let u: undefined undefined;
let n: null null;
联合类型
联合类型Union Types表示取值可以为多种类型中的一种。
let myFavoriteNumber: string | number;
myFavoriteNumber seven;
myFavoriteNumber 7; 1.2 条件语句
条件语句用于基于不同的条件来执行不同的动作。TypeScript 条件语句是通过一条或多条语句的执行结果True 或 False来决定执行的代码块。
if 语句
TypeScript if 语句由一个布尔表达式后跟一个或多个语句组成。
var num:number 5
if (num 0) { console.log(数字是正数)
}
if...else 语句
一个 if 语句后可跟一个可选的 else 语句else 语句在布尔表达式为 false 时执行。
var num:number 12;
if (num % 20) { console.log(偶数);
} else {console.log(奇数);
}
if...else if....else 语句
if...else if....else 语句在执行多个判断条件的时候很有用。
var num:number 2
if(num 0) { console.log(num 是正数)
} else if(num 0) { console.log(num 是负数)
} else { console.log(num 为0)
}
switch…case 语句
一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个 case且被测试的变量会对每个 switch case 进行检查。
var grade:string A;
switch(grade) { case A: { console.log(优); break; } case B: { console.log(良); break; } case C: {console.log(及格); break; } case D: { console.log(不及格); break; } default: { console.log(非法输入); break; }
} 1.3 函数
函数是一组一起执行一个任务的语句函数声明要告诉编译器函数的名称、返回类型和参数。TypeScript可以创建有名字的函数和匿名函数其创建方法如下
// 有名函数
function add(x, y) {return x y;
}// 匿名函数
let myAdd function (x, y) {return x y;
};
为函数定义类型
为了确保输入输出的准确性我们可以为上面那个函数添加类型
// 有名函数给变量设置为number类型
function add(x: number, y: number): number {return x y;
}// 匿名函数给变量设置为number类型
let myAdd function (x: number, y: number): number {return x y;
};
可选参数
在TypeScript里我们可以在参数名旁使用 ?实现可选参数的功能。 比如我们想让lastName是可选的
function buildName(firstName: string, lastName?: string) {if (lastName)return firstName lastName;elsereturn firstName;
}let result1 buildName(Bob);
let result2 buildName(Bob, Adams);
剩余参数
剩余参数会被当做个数不限的可选参数。 可以一个都没有同样也可以有任意个。 可以使用省略号 ...进行定义
function getEmployeeName(firstName: string, ...restOfName: string[]) {return firstName restOfName.join( );
}let employeeName getEmployeeName(Joseph, Samuel, Lucas, MacKinzie);
箭头函数
ES6版本的TypeScript提供了一个箭头函数它是定义匿名函数的简写语法用于函数表达式它省略了function关键字。箭头函数的定义如下其函数是一个语句块
( [param1, parma2,…param n] ) {// 代码块
}
其中括号内是函数的入参可以有0到多个参数箭头后是函数的代码块。我们可以将这个箭头函数赋值给一个变量如下所示
let arrowFun ( [param1, parma2,…param n] ) {// 代码块
}
如何将我们熟悉的函数定义方式转换为箭头函数。我们可以定义一个判断正负数的函数如下
function testNumber(num: number) {if (num 0) {console.log(num 是正数);} else if (num 0) {console.log(num 是负数);} else {console.log(num 为0);}
}testNumber(1) //输出日志1 是正数
将这个函数定义为箭头函数定义如下所示
let testArrowFun (num: number) {if (num 0) {console.log(num 是正数);} else if (num 0) {console.log(num 是负数);} else {console.log(num 为0);}
}testArrowFun(-1) //输出日志-1 是负数
后面在HarmonyOS应用开发时会经常用到箭头函数。例如给一个按钮添加点击事件其中onClick事件中的函数就是箭头函数。
Button(Click Now).onClick(() {console.info(Button is click)}) 1.4 类
TypeScript支持基于类的面向对象的编程方式定义类的关键字为 class后面紧跟类名。类描述了所创建的对象共同的属性和方法。
类的定义
例如我们可以声明一个Person类这个类有3个成员一个是属性包含name和age)一个是构造函数一个是getPersonInfo方法其定义如下所示。
class Person {private name: stringprivate age: numberconstructor(name: string, age: number) {this.name name;this.age age;}public getPersonInfo(): string {return My name is ${this.name} and age is ${this.age};}
}let person1 new Person(Jacky, 18);
person1.getPersonInfo();
继承
继承就是子类继承父类的特征和行为使得子类具有父类相同的行为。TypeScript中允许使用继承来扩展现有的类对应的关键字为extends。
class Employee extends Person {private department: stringconstructor(name: string, age: number, department: string) {super(name, age);this.department department;}public getEmployeeInfo(): string {return this.getPersonInfo() and work in ${this.department};}
}let person2 new Employee(Tom, 28, HuaWei);
person2.getPersonInfo();
person2.getEmployeeInfo();
在TypeScript中有public、private、protected修饰符其功能和具体使用场景大家可以参考TypeScript的相关学习资料进行拓展学习。 1.5 模块 随着应用越来越大通常要将代码拆分成多个文件即所谓的模块module。模块可以相互加载并可以使用特殊的指令 export 和 import 来交换功能从另一个模块调用一个模块的函数。
两个模块之间的关系是通过在文件级别上使用 import 和 export 建立的。模块里面的变量、函数和类等在模块外部是不可见的除非明确地使用 export 导出它们。类似地我们必须通过 import 导入其他模块导出的变量、函数、类等。
导出
任何声明比如变量函数类类型别名或接口都能够通过添加export关键字来导出例如我们要把NewsData这个类导出代码示意如下
export class NewsData {title: string;content: string;imagesUrl: ArrayNewsFile;source: string;constructor(title: string, content: string, imagesUrl: ArrayNewsFile, source: string) {this.title title;this.content content;this.imagesUrl imagesUrl;this.source source;}
}
导入
模块的导入操作与导出一样简单。 可以使用以下 import形式之一来导入其它模块中的导出内容。
import { NewsData } from ../common/bean/NewsData; 1.6 迭代器 当一个对象实现了Symbol.iterator属性时我们认为它是可迭代的。一些内置的类型如ArrayMapSetStringInt32ArrayUint32Array等都具有可迭代性。
for..of 语句
for..of会遍历可迭代的对象调用对象上的Symbol.iterator方法。 下面是在数组上使用for..of的简单例子
let someArray [1, string, false];for (let entry of someArray) {console.log(entry); // 1, string, false
}
for..of vs. for..in 语句
for..of和for..in均可迭代一个列表但是用于迭代的值却不同for..in迭代的是对象的键而for..of则迭代的是对象的值。
let list [4, 5, 6];for (let i in list) {console.log(i); // 0, 1, 2,
}for (let i of list) {console.log(i); // 4, 5, 6
} TypeScript是一个开源的编程语言本章节只介绍了TypeScript的基础语法知识更多内容可以参考TypeScript的官方教程https://www.typescriptlang.org/docs/。在学习过程中如果没有搭建TypeScript的开发环境也可以直接使用在线Playground平台https://www.typescriptlang.org/play进行编码练习。 2.ArkTS
2.1 JAVA SCRIPT Mozilla创造了JSMicrosoft创建了TSHuawei进一步推出了ArkTS。从最初的基础的逻辑交互能力到具备类型系统的高效工程开发能力再到融合声明式UI、多维状态管理等丰富的应用开发能力共同组成了相关的演进脉络。 ArkTS是HarmonyOS优选的主力应用开发语言。它在TypeScript简称TS的基础上扩展了声明式UI、状态管理等相应的能力让开发者可以以更简洁、更自然的方式开发高性能应用。TS是JavaScript简称JS的超集ArkTS则是TS的超集。ArkTS会结合应用开发和运行的需求持续演进包括但不限于引入分布式开发范式、并行和并发能力增强、类型系统增强等方面的语言特性。 JS语言由Mozilla创造最初主要是为了解决页面中的逻辑交互问题它和HTML负责页面内容、CSS负责页面布局和样式共同组成了Web页面/应用开发的基础。随着Web和浏览器的普及以及Node.js进一步将JS扩展到了浏览器以外的环境JS语言得到了飞速的发展。在2015年相关的标准组织ECMA发布了一个主要的版本ECMAScript 6简称ES6这个版本具备了较为完整的语言能力包括类Class、模块Module、相关的语言基础API增强Map/Set等、箭头函数Arrow Function等。从2015年开始ECMA每年都会发布一个标准版本比如ES2016/ES2017/ES2018等JS语言越来越成熟。 为了提升应用的开发效率相应的JS前端框架也不断地涌现出来。其中比较典型的有Facebook发起的React.js以及个人开发者尤雨溪发起的Vue.js。React和Vue的主要出发点都是将响应式编程的能力引入到应用开发中实现数据和界面内容的自动关联处理。具体的实现方式上React对JS做了一些扩展引入了JSXJavaScript XML语法可以将HTML的内容统一表示成JS来处理Vue则是通过扩展的模板语法Template的方式来处理。 下面通过两个示例简要介绍React和Vue 以上代码描述了React如何在指定的页面元素id为id01的div元素中改变相应的字符串内容从Hello World!到Hello John Doe!。其中第5行的ReactDOM.render()是React JS库提供的一个方法它可以将相应的内容刷新到指定的HTML元素中。第6行是符合JSX语义的一段代码它包含了一个类似HTML结构的字符串h1.../h1以及一个表达数据绑定语义的字段({name})会关联到第4行定义的name变量。通过这种方式JSX把HTML的语义以及数据绑定机制和JS语言结合起来可以方便地在JS语言中使用。 以上Vue示例代码也描述了类似的功能。其中第1~3行是类似HTML的语法描述一个id为app的div页面元素其中的{{message}}是数据绑定的语义在Vue中表示为Template。第6~9行是JS代码描述了一个Vue对象对应了上述的app页面元素以及所需的数据变量message的内容信息。第11~13行则是JS函数它改变message变量的值为John Doe。执行这个函数时Vue会自动实现相应的UI界面刷新。 如上所示React和Vue所表达的能力是类似的不过侧重点稍微有所不同。React主要是基于JSX的语法将类HTML的语法融合到JS语言中Vue则是基于Template机制在HTML的基础上扩展相应的语义。当然上面这两个例子只是简要地描述了React和Vue的基础信息更详细的语法以及CSS相关的使用等都没涉及。 2.2 TS 随着JS生态的发展如何更有效地支撑大型的应用工程开发变成了一个重要的课题。大型的应用工程一般会涉及较复杂的代码以及较多的团队协作对语言的规范性模块的复用性、扩展性以及相关的开发工具都提出了更高的要求。为此Microsoft在JS的基础上创建了TS语言并在2014年正式发布了1.0版本。TS主要从以下几个方面做了进一步的增强 引入了类型系统并提供了类型检查以及类型自动推导能力可以进行编译时错误检查有效的提升了代码的规范性以及错误检测范围和效率。在类型系统基础上引入了声明文件Declaration Files来管理接口或其他自定义类型。声明文件一般是以d.ts的形式来定义模块中的接口这些接口和具体的实现做了相应的分离有助于各模块之间的分工协作。另外TS通过接口泛型Generics等相关特性的支持进一步增强了设计复杂的框架所需的扩展以及复用能力。 在工具层面TS也有相应的编辑器、编译器、IDEIntegrated Development Environment插件等相关的工具来进一步提升开发效率。 TS在兼容JS生态方面也做了较好的平衡TS应用通过相应编译器可以编译出纯JS应用可以在标准的JS引擎上运行。同时TS定位为JS的超集即JS应用也是合法的TS应用。此外在标准层面上TS兼容ECMA的相应标准并维护那些还未成为ECMA标准的新特性。 2.3 ArkTS 2019年华为在思考如何构建新的应用开发框架时从以下几个维度进行了重点考虑 语言生态开发效率性能体验跨设备/跨平台能力 由于JS/TS有比较完善的开发者生态语言也比较中立友好有相应的标准组织可以逐步演进JS/TS语言成了比较自然的选择。以JS/TS为基础在开发框架的维度我们做了如下的架构演进设计 通过基于JS扩展的类Web开发范式来支持主流的前端开发方式。同步的在运行时方面通过渲染引擎的增强平台无关的自绘制机制、声明式UI后端设计、动态布局/多态UI组件等语言编译器和运行时的优化增强代码预编译、高效FFI-Foreign Function Interface、引擎极小化等进一步提升相关的性能体验并可部署到不同设备上包括百KB级内存的轻量设备。另外通过平台适配层的设计构建了跨OS平台的基础设施。通过基于TS扩展的声明式UI开发范式提供了更简洁更自然的开发体验。在运行时方面在上述的基础上结合语言运行时的类型优化以及渲染运行时的扁平化流水线技术等进一步提升性能体验。 3.示例
3.1 概述性示例 UI界面会显示两段文本和一个按钮当开发者点击按钮时文本内容会从Hello World变为‘Hello ArkUI’ 这个示例中所包含的ArkTS声明式开发范式的基本组成说明如下
装饰器
用来装饰类、结构体、方法以及变量赋予其特殊的含义如上述示例中 Entry 、Component 、 State 都是装饰器。具体而言 Component 表示这是个自定义组件 Entry 则表示这是个入口组件 State 表示组件中的状态变量此状态变化会引起 UI 变更。
自定义组件
可复用的 UI 单元可组合其它组件如上述被 Component 装饰的 struct Hello。
UI 描述
声明式的方式来描述 UI 的结构如上述 build() 方法内部的代码块。
内置组件
框架中默认内置的基础和布局组件可直接被开发者调用比如示例中的 Column、Text、Divider、Button。
事件方法
用于添加组件对事件的响应逻辑统一通过事件方法进行设置如跟随在Button后面的onClick()。
属性方法
用于组件属性的配置统一通过属性方法进行设置如fontSize()、width()、height()、color() 等可通过链式调用的方式设置多项属性。 又一个代码示例 Component装饰器表示以下为自定义组件自定义组件是指可复用的 UI 单元可组合其它组件融合内置基础组件 从基础组件到自定义组件再到完整页面 3.2 自定义组件 如下 不同文件的情况 生命周期 Entry页面入口组件的生命周期回调函数 3.3 渲染控制语法 if else 循环渲染 3.4 状态管理 使组件动起来根据用户输入和数据变化呈现不同效果 代码 刷新功能 代码 外部 4.more 从UI框架的需求角度ArkTS在TS的类型系统的基础上做了进一步的扩展定义了各种装饰器、自定义组件和UI描述机制再配合UI开发框架中的UI内置组件、事件方法、属性方法等共同构成了应用开发的主体。在应用开发中除了UI的结构化描述之外还有一个重要的方面状态管理。如上述示例中用 State 装饰过的变量 myText 包含了一个基础的状态管理机制即 myText 的值的变化会自动触发相应的 UI 变更 Text组件。ArkUI 中进一步提供了多维度的状态管理机制。和 UI 相关联的数据不仅可以在组件内使用还可以在不同组件层级间传递比如父子组件之间爷孙组件之间也可以是全局范围内的传递还可以是跨设备传递。另外从数据的传递形式来看可分为只读的单向传递和可变更的双向传递。开发者可以灵活的利用这些能力来实现数据和 UI 的联动。 总体而言ArkUI开发框架通过扩展成熟语言、结合语法糖或者语言原生的元编程能力、以及UI组件、状态管理等方面设计了统一的UI开发范式结合原生语言能力共同完成应用开发。这些构成了当前ArkTS基于TS的主要扩展。 开发文档声明式UI开发指导-UI开发-基于ArkTS开发-开发-HarmonyOS应用开发
文章转载自: http://www.morning.rjfr.cn.gov.cn.rjfr.cn http://www.morning.fjtnh.cn.gov.cn.fjtnh.cn http://www.morning.ysdwq.cn.gov.cn.ysdwq.cn http://www.morning.dmwjl.cn.gov.cn.dmwjl.cn http://www.morning.flqbg.cn.gov.cn.flqbg.cn http://www.morning.wbyqy.cn.gov.cn.wbyqy.cn http://www.morning.ddrdt.cn.gov.cn.ddrdt.cn http://www.morning.bmtyn.cn.gov.cn.bmtyn.cn http://www.morning.tddrh.cn.gov.cn.tddrh.cn http://www.morning.yjprj.cn.gov.cn.yjprj.cn http://www.morning.pqjlp.cn.gov.cn.pqjlp.cn http://www.morning.ltzkk.cn.gov.cn.ltzkk.cn http://www.morning.rwmq.cn.gov.cn.rwmq.cn http://www.morning.rghkg.cn.gov.cn.rghkg.cn http://www.morning.xxknq.cn.gov.cn.xxknq.cn http://www.morning.rlhh.cn.gov.cn.rlhh.cn http://www.morning.rlwcs.cn.gov.cn.rlwcs.cn http://www.morning.fqyqm.cn.gov.cn.fqyqm.cn http://www.morning.nngq.cn.gov.cn.nngq.cn http://www.morning.hlxxl.cn.gov.cn.hlxxl.cn http://www.morning.cyfsl.cn.gov.cn.cyfsl.cn http://www.morning.wjrtg.cn.gov.cn.wjrtg.cn http://www.morning.jrbyz.cn.gov.cn.jrbyz.cn http://www.morning.qbmpb.cn.gov.cn.qbmpb.cn http://www.morning.kgtyj.cn.gov.cn.kgtyj.cn http://www.morning.wbrf.cn.gov.cn.wbrf.cn http://www.morning.yxnkr.cn.gov.cn.yxnkr.cn http://www.morning.rqhdt.cn.gov.cn.rqhdt.cn http://www.morning.fbzdn.cn.gov.cn.fbzdn.cn http://www.morning.kzrbd.cn.gov.cn.kzrbd.cn http://www.morning.csxlm.cn.gov.cn.csxlm.cn http://www.morning.ktxd.cn.gov.cn.ktxd.cn http://www.morning.hkchp.cn.gov.cn.hkchp.cn http://www.morning.bqpgq.cn.gov.cn.bqpgq.cn http://www.morning.fkyrk.cn.gov.cn.fkyrk.cn http://www.morning.mbzlg.cn.gov.cn.mbzlg.cn http://www.morning.zlgr.cn.gov.cn.zlgr.cn http://www.morning.xkyfq.cn.gov.cn.xkyfq.cn http://www.morning.qzpkr.cn.gov.cn.qzpkr.cn http://www.morning.zwppm.cn.gov.cn.zwppm.cn http://www.morning.pdtjj.cn.gov.cn.pdtjj.cn http://www.morning.cmldr.cn.gov.cn.cmldr.cn http://www.morning.frqtc.cn.gov.cn.frqtc.cn http://www.morning.tgts.cn.gov.cn.tgts.cn http://www.morning.qzbwmf.cn.gov.cn.qzbwmf.cn http://www.morning.xcyhy.cn.gov.cn.xcyhy.cn http://www.morning.yhyqg.cn.gov.cn.yhyqg.cn http://www.morning.wpqwk.cn.gov.cn.wpqwk.cn http://www.morning.jpydf.cn.gov.cn.jpydf.cn http://www.morning.fmdvbsa.cn.gov.cn.fmdvbsa.cn http://www.morning.cczzyy.com.gov.cn.cczzyy.com http://www.morning.tfgkq.cn.gov.cn.tfgkq.cn http://www.morning.zdqsc.cn.gov.cn.zdqsc.cn http://www.morning.mhnxs.cn.gov.cn.mhnxs.cn http://www.morning.ddgl.com.cn.gov.cn.ddgl.com.cn http://www.morning.wknjy.cn.gov.cn.wknjy.cn http://www.morning.nffwl.cn.gov.cn.nffwl.cn http://www.morning.pmghz.cn.gov.cn.pmghz.cn http://www.morning.mqbzk.cn.gov.cn.mqbzk.cn http://www.morning.zqcgt.cn.gov.cn.zqcgt.cn http://www.morning.mmkrd.cn.gov.cn.mmkrd.cn http://www.morning.wmsgt.cn.gov.cn.wmsgt.cn http://www.morning.jfnlj.cn.gov.cn.jfnlj.cn http://www.morning.qwpdl.cn.gov.cn.qwpdl.cn http://www.morning.tyrlk.cn.gov.cn.tyrlk.cn http://www.morning.cthkh.cn.gov.cn.cthkh.cn http://www.morning.jjmrx.cn.gov.cn.jjmrx.cn http://www.morning.pjfmq.cn.gov.cn.pjfmq.cn http://www.morning.1000sh.com.gov.cn.1000sh.com http://www.morning.wnkjb.cn.gov.cn.wnkjb.cn http://www.morning.gghhmi.cn.gov.cn.gghhmi.cn http://www.morning.pxlpt.cn.gov.cn.pxlpt.cn http://www.morning.gcysq.cn.gov.cn.gcysq.cn http://www.morning.zpqk.cn.gov.cn.zpqk.cn http://www.morning.rdmz.cn.gov.cn.rdmz.cn http://www.morning.rmxgk.cn.gov.cn.rmxgk.cn http://www.morning.zrlms.cn.gov.cn.zrlms.cn http://www.morning.mingjiangds.com.gov.cn.mingjiangds.com http://www.morning.yrdkl.cn.gov.cn.yrdkl.cn http://www.morning.nkjnr.cn.gov.cn.nkjnr.cn