angular6.0使用教程之父组件通过url传递id给子组件的方法

在angular6.0使用教程:angular主从组件章节我们介绍了父组件向子组件传递数据,当时是在同一个页面传递数据的。而本章的angular数据传递将是在不同页面间的传递,即list组件页面向post组件页面传递数据。

第一步:配置post组件的路由:

在上一章angular6.0使用教程:angular6.0的路由使用中我们为angular6.0项目设置了路由,我们只设置了home组件和list组件的路由。我们还要设置post组件的路由,因为post是产品组件,而不同的产品会有不同的id,显示不同的产品内容,所以,我们要为每一个id要设置对应的路由。app-routing.module.ts文件代码如下:

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import {HomeComponent} from "./home/home.component"; //引入home组件
import {ListComponent} from "./list/list.component";//引入list组件
import {PostComponent} from "./post/post.component";//引入post组件
const routes: Routes = [
 { path:'home', component:HomeComponent },
 { path:'list', component:ListComponent },
 //post组件路由
 { path:'post/:id', component:PostComponent },
 { path:'**', redirectTo:'/home' }
];
@NgModule({
 imports: [RouterModule.forRoot(routes)],
 exports: [RouterModule]
})
export class AppRoutingModule { }

第二步:修改db.service.ts服务代码:

在angular6.0使用教程:创建和使得angular服务章节中,我们能过angular6.0的服务向远程服务器接口请求数据,并在list组件中接收获取到angular请求到的数据。具体,可参阅这一章节。

本章我们要实现的功能是:点击list组件页面上的一个列表链接,就向post组件页面传递一个产品id,post组件会向db.service.ts服务获取这个产品id对应的产品信息。所以,我们要在db.service.ts服务中再添加一个方法——用来向远程服务器请求这个产品id的信息。代码如下:

getPost(id:number):Observable<any>{
 return this.http.get("/api/dream/index.php/home/index/post_detail/id/"+id);
}

第三步:在post.component.ts组件文件中添加获取数据方法:

1:引入db.service.ts服务:

import {DbService} from "../db.service";

2:引入ActivatedRoute模块【当前被激活的路由,即当前post,可以获取当前post的id】:

import {ActivatedRoute} from "@angular/router";

3:在post组件的构造函数中实例化DbService服务和ActivatedRoute模块对象:

constructor(private db:DbService,private route:ActivatedRoute) { }

4:声明一个接收变量:

post:any;

5:添加获取DbService服务数据的方法:

getPost():void{
 var id = +this.route.snapshot.paramMap.get('id'); //获取当前Post的产品id
 this.db.getPost(id).subscribe( //通过db:DbService的getPost()方法获取数据
 data=>{ this.post = data; //把产品全部的信息赋值给post变量 }
 );
}

6:在初始化ngOnInit中调用这个方法:

ngOnInit() {
 this.getPost();
}

7:在post.component.html前台代码中调用数据:

<div class="post_detail" *ngIf="post">
 <h1>{{ post.name }}</h1>
 <h3>{{ post.addtime }}</h3>
 <ul [innerHTML]="post.content"></ul>
</div>

这时,在前台调用可能会有“调用HTML字符串”出现的问题,这个可以参阅angular6.0使用教程:angular如何调用HTML字符串章节。

这样,我们就实现了angular6.0的子组件通过url获取父组件传递过来的id,再通过服务请求远程数据。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • angularjs使用directive实现分页组件的示例

    闲来没事,分享下项目中自己写的分页组件.来不及了,直接上车. 效果: 输入框可任意输入,并会自动提交到该页 依赖项: fontawesome,bootstrap html: <ul class="page clearfix"> <li ng-hide="currentPage <= 1"> <a href="" ng-click=" rel="external nofollow"

  • angular2倒计时组件使用详解

    项目中遇到倒计时需求,考虑到以后在其他模块也会用到,就自己封装了一个组件.便于以后复用. 组件需求如下: - 接收父级组件传递截止日期 - 接收父级组件传递标题 组件效果 变量 组件countdown.html代码 <div class="count-down"> <div class="title"> <h4> {{title}} </h4> </div> <div class="body

  • Angular使用动态加载组件方法实现Dialog的示例

    网上的文章和教程基本上写到组件加载完成就没了!没了?!而且都是只能存在一个dialog,想要打开另一个dialog必须先销毁当前打开的dialog,之后看过 material 的实现方式,怪自己太蠢看不懂源码,就只能用自己的方式来实现一个dialog组件了 Dialog组件的目标:可以同时存在多个Dialog,可销毁指定Dialog,销毁后html中无组件残留且提供回调 动态加载组件的实现方式有两种,angular4.0版本之前使用ComponentFactoryResolver来实现,4.0之

  • Angular通过指令动态添加组件问题

    之前自己写的公共组件,都是会先引入,需要调起的时候再通过service控制公共组件状态.值.回调函数什么的.但是有一些场景不适合这种方式,还是动态添加组件更加好.通过写过的一个小组件来总结下. 创建组件 场景:鼠标移动到图标上时,展示解释性的说明文字.那就需要创建一个普通的tooltip组件.如下: <aside class="hover-tip-wrapper"> <span>{{tipText}}</span> </aside> im

  • angular6.0使用教程之父组件通过url传递id给子组件的方法

    在angular6.0使用教程:angular主从组件章节我们介绍了父组件向子组件传递数据,当时是在同一个页面传递数据的.而本章的angular数据传递将是在不同页面间的传递,即list组件页面向post组件页面传递数据. 第一步:配置post组件的路由: 在上一章angular6.0使用教程:angular6.0的路由使用中我们为angular6.0项目设置了路由,我们只设置了home组件和list组件的路由.我们还要设置post组件的路由,因为post是产品组件,而不同的产品会有不同的id,

  • React通过父组件传递类名给子组件的实现方法

    React 教程 React 是一个用于构建用户界面的 JAVASCRIPT 库. React主要用于构建UI,很多人认为 React 是 MVC 中的 V(视图). React 起源于 Facebook 的内部项目,用来架设 Instagram 的网站,并于 2013 年 5 月开源. React 拥有较高的性能,代码逻辑非常简单,越来越多的人已开始关注和使用它. React 特点 1.声明式设计 −React采用声明范式,可以轻松描述应用. 2.高效 −React通过对DOM的模拟,最大限度

  • vue父组件异步获取数据传给子组件的方法

    但是现在问题是父组件的数据是异步获取的,而子组件一开始就会渲染,如果此时没有传入数据,而子组件又要用到数据中的length属性时就会报错: 怎么办呢?最简单的办法就是让子组件条件渲染,当有数据的时候才渲染,这样就不会抛出错误了. 但是这还不够完美,子组件一般不直接使用父组件传来的值,二是监听一下,然后有变化了的时候再赋值给data,渲染的时候用data里的数据,这样就能保证随时动态更新数据 props: ['floorGoods'], data() { return{ flGoods: {} }

  • jQuery获取所有父级元素及同级元素及子元素的方法(推荐)

    1.获取父级元素 $("#id").parent() 获取其父级元素 $("#id").parents() 获取其所有的祖先元素 $("#id").closest() 获取其最近的祖先元素,依次上溯 -------------------------------------------------------------------------------- 2.获取同级元素 $("#id").next(selector) 获

  • angular6.0开发教程之如何安装angular6.0框架

    在5月4日这天,angular家庭迎来了最新版本--angular6.0,angular6.0时代正式到来.6.0版本重点关注工具链以及工具链在Angular中的运行速度问题.angular6.0在原angular5的基础上有了非常大的改进. angular6.0的CLI版本跟angular版本正式对应,也是6.0,而angular5版中的CLI版本是1.7.3版. angular6.0新增了update升级功能,后期angular有新版本时,可以直接通过update就可以升级到最新版. ang

  • Vue2.x中的父组件传递数据至子组件的方法

    父组件结构 template <template> <div> <v-girl-group :girls="aGirls"></v-girl-group> </div> </template> script <script> import vGirlGroup from './GirlGroup' export default { name: 'girl', components: { vGirlGro

  • 详解vue.js2.0父组件点击触发子组件方法

    之前关于vue.js2.0父组件的一点学习,最近需要回顾,就顺便发到随笔上了 <body> <div id="counter-event-example"> <p>{{ total }}</p> <button-counter v-on:ee="incrementTotal"></button-counter> <button-counter v-on:ee="increment

  • Vuejs 2.0 子组件访问/调用父组件的方法(示例代码)

    有时候因为布局问题,需要子组件 把数据 传给父组件,并执行父级的某个方法,不多说上代码: 子组件: <template> <div class="isShowing" ref="isShowing"> <div class="menu-wrapper" ref="scroll_warpper" v-show="!hid_show_switch"> <ul ref=&

  • vue2.0 父组件给子组件传递数据的方法

    在父组件 App.vue 中引用子组件 A.vue,把 name 的值传给 A 组件. 1.安装 在桌面新建一个文件夹 $ cd 到文件中 $ npm install -g vue-cli $ vue init webpack . $ npm install $ npm run dev vue init webpack . 之后的选择解释 2.删除 1.删除App中的一些内容如下 2.删除components文件中的HelloWorld.vue 3.修改 修改App.vue 如下: <templ

  • vue2.0 子组件改变props值,并向父组件传值的方法

    为什么我们会有修改 prop 中数据的冲动呢?通常是这两种原因: prop 作为初始值传入后,子组件想把它当作局部数据来用: prop 作为初始值传入,由子组件处理成其它数据输出. 对这两种原因,正确的应对方式是: 定义一个局部变量,并用 prop 的值初始化它: props: ['initialCounter'], data: function () { return { counter: this.initialCounter } } 定义一个计算属性,处理 prop 的值并返回. prop

随机推荐