本文介绍了Angular4学习笔记之实现绑定和分包,分享给大家,希望对大家有帮助

src目录下的app/app.component.ts文件是一个标准的angular4组件的结构。
上面@component()括号内template属性里用`(这个符号不是单引号,而是键盘1左边、tab键上面的那个符号)包裹的是View,下面export的class部分是Controller。
希望实现的效果长这个样子:
万里长征第一步,先从修改View开始。
修改temlate里的HTML文件,改成下面的样子:
<h1>Hello,World</h1> <p>你好,gundam meister</p> <span>海牛高达</span> <div> <span>海牛高达</span> <span>NewType</span> </div>
上面部分先充当项目简介。
中间的span假装是高达列表。
下面的div包裹的两个span假装是高达详情。
刷新页面,现在是这个样子的:
好吧我承认和效果图比起来是挫了一点,但是现在先专注于功能实现。
需要实现的功能是:点击高达列表,可以显示高达详情。
正常的情况下,当然不会用常量去渲染页面。而如何沟通Controller和View就是Angular用Model干的事情:绑定。
绑定:你有我有全都有。
在同一个组件(component)内,在class(Controller)里定义的变量名,可以直接在template(View)里使用。
@Component({
selector: 'my-app',
template: `
<h1>Hello,World</h1>
<p>你好,gundam meister</p>
<span>{{name}}</span>
<div>
<span>{{name}}</span>
<span>{{type}}</span>
</div>
`
})
export class AppComponent {
name = '海牛高达';
type = 'NewType';
}
刷新页面,依然可以显示:
当然,gundam其实是一个类,所以现在是model上场的时候了。
定义一个类 gundam:
class Gundam {
name: string;
type: string;
}
改写name和type,让他们成为属性值而不是string常量:
gundam: Gundam = {
name: '海牛',
type: 'NewType'
};
typescript 的语法有点奇怪,定义某个变量是某种类型的写法,是变量名在前变量类型在后。
改变temple里的引用:
<h1>Hello,World</h1>
<p>你好,gundam meister</p>
<span>{{gundam.name}}</span>
<div>
<span>{{gundam.name}}</span>
<span>{{gundam.type}}</span>
</div>
刷新页面:
继续review代码。
主页展示的是一个gundam列表而不是某一个gundam,所以用一个gundam数组去冒充数据。
const gundams: Gundam[] = [
{name: '海牛高达', type: 'NewType'},
{name: '巴巴托斯', type: '近战'},
{name: '力天使', type: '射击'}
];
之前的angular提供了ng-repeat的标签来循环列表,不过现在4.0以上的时代变成了标签里一个特殊的修饰:*ngFor。
修改class里的代码,定义一个变量gundams接受数组:
gundams = GUNDAMS;
修改template,用*ngFor循环解析数组,进行数据渲染:
<h1>Hello,World</h1>
<p>你好,gundam meister</p>
<div *ngFor="let gundam of gundams">
<span>
{{gundam.name}}
</span>
</div>
<div>
<span>{{gundam.name}}</span>
<span>{{gundam.type}}</span>
</div>
刷新页面:
列表已经根据数据来变化了(当然数据流还是有待商榷),下面来修改使得详情能根据点击的列表项变化。
每一个html标签都有事件(click hover 等等),而angular也继续调用了这些事件,只是写法不太一样。
<div *ngFor="let gundam of gundams" (click)="onSelected(gundam)">
解释:点击触发class中的onSelected方法,同时把gundam作为参数传递进去。
因为View里用到的onSected函数来自controller,也就是class,所以需要补充:
selectedGundam: Gundam; // 定义一个selectedGudam作为接收详情的变量
onSelected (gundam: Gundam) : void{
this.selectedGundam = gundam; // 通过参数赋值
}
修改template中的html显示:
<div>
<span>{{selectedGundam.name}}</span>
<span>{{selectedGundam.type}}</span>
</div>
此时刷新页面会报错,因为虽然通过点击div可以给selectedGudam赋值,但是当selectedGundam被初始化的时候是没有值的。
有两种解决办法:
第一就是给selected设定初始值并设定初始被选择的div。
另一种就是根据selected有没有被初始化,决定显示不显示详情的div。
因为angular提供了ngIf修饰,用第二种方法会比较省事一点。
<div *ngIf="selectedGundam">
<span>{{selectedGundam.name}}</span>
<span>{{selectedGundam.type}}</span>
</div>
刷新页面
点击巴巴托斯
总的来说,写到这里业务逻辑已经完成了一半,甚至更多。因为本身项目就是一个点击查看的单页面应用,并不太复杂。但是所有的代码都挤在一个类里,可读性和扩展性都会变的很差。
所以是时候开始下一步了。
分包的精髓:拆。
import {
Component
} from '@angular/core';
class Gundam {
name: string;
type: string;
}
const GUNDAMS: Gundam[] = [
{name: '海牛高达', type: 'NewType'},
{name: '巴巴托斯', type: '近战'},
{name: '力天使', type: '射击'}
];
@Component({
selector: 'my-app',
template: `
<h1>Hello,World</h1>
<p>你好,gundam meister</p>
<div *ngFor="let gundam of gundams" (click)="onSelected(gundam)">
<span>
{{gundam.name}}
</span>
</div>
<div *ngIf="selectedGundam">
<span>{{selectedGundam.name}}</span>
<span>{{selectedGundam.type}}</span>
</div>
`
})
export class AppComponent {
gundam: Gundam = {
name: '海牛',
type: 'NewType'
};
gundams = GUNDAMS;
selectedGundam: Gundam; // 定义一个selectedGudam作为展示详情的变量
onSelected (gundam: Gundam): void {
this.selectedGundam = gundam; // 通过参数赋值
}
}
现在一个component挤了太多的东西,有数据、有常量、有template和class。如果项目很小的话(比如这个demo)还可以接受,但是一旦业务逻辑繁琐起来就是totally disaster。
就算不介意坑别人,也别给隔了很久再去维护的自己找麻烦。
先把gundam这个class给摘出来,既然是model就好好呆在model的地方。
在src下新建model的包,新建一个gundam.ts的文件,把gundam class给ctrl+x过去。
在原本的地方导入:
import { Gundam } from '../../model/gundam';
再把数组常量给挪走,理论上数据是需要从服务端取,但是我不写服务端好多年,所以还是继续使用假数据。
在src新建包service,新建data.ts文件,导入gundam类以后导出数组:
import { Gundam } from './../model/gundam';
export const GUNDAMS: Gundam[] = [
{name: '海牛高达', type: 'NewType'},
{name: '巴巴托斯', type: '近战'},
{name: '力天使', type: '射击'}
];
在原位置引入使用:
import { GUNDAMS } from './../../service/data';
ps:不要忘记在每个文件后空一行.虽然不空可以正常运行,但是会有错误提示.总的来说就是这么一个格式要求.
此时可以正常显示,而app.component.ts里已经整洁多了。
但是还不够,现在要把详情分离出去。让上帝的归上帝,凯撒的归凯撒。主页就处理主页数据,详情就处理详情数据。
换句话说,把首页分成两个页面:首页 + 详情。
需要用到的就是route。
PS,有关绑定:
Angular的绑定很有意思,有双向的也有单向的,有在class里声明一个变量在template里使用的,也有在template里暴露一个class里的变量给外界赋值的。目前我见到的是如下三种写法(指在view里):
1){{变量名}},单项绑定,class中的值会显示到view里。
2)[变量名],单项绑定,一般后面还会跟个“=”,用来给class里的变量或者属性赋值。
3)*ngModel=[(变量名)],双向绑定。有关双向绑定其实我还是有点不理解,官方文档上也只是在表单处理时应用。大体上说双向绑定就是绑定值后在页面修改值可以影响class内的值,而class内的值改变后view的值也会改变。
比如可以双向绑定一个input,初始化的时候从服务端读取一个值放进去,同时这个值是可以修改的。修改完毕class里的值也变了,可以直接提交而不用多写拿value的步骤。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Angular4
# 绑定和分包
# 分包
# 绑定
# Web前端框架Angular4.0.0 正式版发布
# Angular4 中常用的指令入门总结
# 浅谈angular4生命周期钩子
# Angular4学习笔记之准备和环境搭建项目
# Angular4 中内置指令的基本用法
# 详解Angular4 路由设置相关
# 深入理解Angular4中的依赖注入
# angular4中关于表单的校验示例
# Angular4开发解决跨域问题详解
# 浅谈angular4 ng-content 中隐藏的内容
# Angular4的输入属性与输出属性实例详解
# 的是
# 凯撒
# 你好
# 变量名
# 是一个
# 都有
# 也有
# 服务端
# 可以直接
# 首页
# 而不是
# 会有
# 万里长征
# 太多
# 也会
# 还可以
# 不太
# 我有
# 很久
相关文章:
临沂网站制作企业,临沂第三中学官方网站?
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
如何在阿里云虚拟服务器快速搭建网站?
详解jQuery停止动画——stop()方法的使用
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
股票网站制作软件,网上股票怎么开户?
已有域名建站全流程解析:网站搭建步骤与建站工具选择
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
C#如何序列化对象为XML XmlSerializer用法
盐城做公司网站,江苏电子版退休证办理流程?
建站之星如何实现五合一智能建站与营销推广?
公众号网站制作网页,微信公众号怎么制作?
如何解决ASP生成WAP建站中文乱码问题?
怀化网站制作公司,怀化新生儿上户网上办理流程?
制作门户网站的参考文献在哪,小说网站怎么建立?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
制作表格网站有哪些,线上表格怎么弄?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
移民网站制作流程,怎么看加拿大移民官网?
北京企业网站设计制作公司,北京铁路集团官方网站?
如何快速重置建站主机并恢复默认配置?
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
建站之星收费标准详解:套餐费用及年费价格表一览
零服务器AI建站解决方案:快速部署与云端平台低成本实践
如何通过.red域名打造高辨识度品牌网站?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
如何通过主机屋免费建站教程十分钟搭建网站?
如何通过服务器快速搭建网站?完整步骤解析
公司网站设计制作厂家,怎么创建自己的一个网站?
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
模具网站制作流程,如何找模具客户?
全景视频制作网站有哪些,全景图怎么做成网页?
微信推文制作网站有哪些,怎么做微信推文,急?
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
建站之星导航如何优化提升用户体验?
如何快速搭建二级域名独立网站?
如何在建站之星绑定自定义域名?
打鱼网站制作软件,波克捕鱼官方号怎么注册?
为什么Go需要go mod文件_Go go mod文件作用说明
郑州企业网站制作公司,郑州招聘网站有哪些?
如何在IIS管理器中快速创建并配置网站?
建站主机选哪种环境更利于SEO优化?
实例解析angularjs的filter过滤器
如何在新浪SAE免费搭建个人博客?
导航网站建站方案与优化指南:一站式高效搭建技巧解析
制作网页的网站有哪些,电脑上怎么做网页?
如何用免费手机建站系统零基础打造专业网站?
家庭服务器如何搭建个人网站?
免费ppt制作网站,有没有值得推荐的免费PPT网站?
如何选择高性价比服务器搭建个人网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。