Angular 4.X开发实践中的踩坑小结


Posted in Javascript onJuly 04, 2017

本文主要给大家分享了关于Angular 4.X开发中与到的一些踩坑经验,分享出来供大家参考学习,下面来一起看看详细的介绍:

一、使用ngIf或者ngSwitch出错

在html文件中使用ngIf或者ngSwitch时,会解析出错,错误提示如下:

Error: Template parse errors:
Can't bind to 'ngSwitch' since it isn't a known property of 'div'.

这个是因为没有在此Component所在的Module中导入CommonModule,虽然你可能在AppModule中导入过了,但是还是需要导入一次,代码如下:

import { CommonModule } from '@angular/common';
@NgModule(
 {
  declarations: [ ],
  imports: [
   CommonModule
  ],
  exports: [ ],
  providers: [ ]
 }
)
export class MainModule { }

二、多级依赖注入器

Angular 4.X拥有多级依赖注入系统,在一个注入器的范围内,依赖都是单例的。它使用冒泡机制,当一个组件申请获得一个依赖时,Angular 先尝试用该组件自己的注入器来满足它。 如果该组件的注入器没有找到对应的提供商,它就把这个申请转给它父组件的注入器来处理。 如果那个注入器也无法满足这个申请,它就继续转给它的父组件的注入器。

举个例子,从登录页点击登录按钮进入主页,LoginComponent和MainComponent都注入了LoginService。

登录:

//login.service.ts
// 这个是登录服务
import { Injectable } from '@angular/core';

@Injectable()
export class LoginService {
 isLoggedIn: boolean = false;
 login(){
  this.isLoggedIn=true;
 }
}
// login.component.ts
//登录界面,只有一个登录按钮,点击后登录会把LoginService中的isLoggedIn变为true

import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { LoginService } from '../login/login.service';
@Component({
 selector: 'app-login',
 template:`<button (click)=login()>Login</button>`,
 providers: [LoginService]
})
export class LoginComponent implements OnInit {

 constructor(private router: Router, private loginService: LoginService) { }

 login() {
 this.loginService.login();
 console.log(this.loginService.isLoggedIn); //结果为true
 this.router.navigate(['/main']);
 }
}
// main.component.ts
// 这个是登陆后的主界面

import { Component} from '@angular/core';
import { LoginService } from '../login/login.service';

@Component({
 selector: 'app-main',
 template: `<h1>HOME</h1>`,
 providers: [LoginService]
})
export class MainComponent implements OnInit {

 private userType: string ;
 constructor(private loginService: LoginService) {
 console.log(this.loginService.isLoginIn); //结果为false
 }
}

从上面的例子可以看出来,在不同的地方注入同样的Service,但是会使用不同的实例,所以会导致结果可能不同,需要注意。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
jquery mobile changepage的三种传参方法介绍
Sep 13 Javascript
一个通过script自定义属性传递配置参数的方法
Sep 15 Javascript
jQuery判断一个元素是否可见的方法
Jun 05 Javascript
JS实现带鼠标效果的头像及文章列表代码
Sep 27 Javascript
微信小程序模版渲染详解
Jan 26 Javascript
vue-cli下的vuex的简单Demo图解(实现加1减1操作)
Feb 26 Javascript
javascript实现考勤日历功能
Nov 29 Javascript
原生JS实现的自动轮播图功能详解
Dec 28 Javascript
在Vue项目中,防止页面被缩放和放大示例
Oct 28 Javascript
JS实现随机点名器
Apr 12 Javascript
vue实现购物车结算功能
Jun 18 Javascript
vue项目proxyTable配置和部署服务器
Apr 14 Vue.js
jQuery操作DOM_动力节点Java学院整理
Jul 04 #jQuery
jQuery层级选择器_动力节点节点Java学院整理
Jul 04 #jQuery
jQuery简介_动力节点Java学院整理
Jul 04 #jQuery
JS实现给json数组动态赋值的方法示例
Mar 19 #Javascript
JavaScript之Canvas_动力节点Java学院整理
Jul 04 #Javascript
jQuery查找和过滤_动力节点节点Java学院整理
Jul 04 #jQuery
jQuery动画_动力节点节点Java学院整理
Jul 04 #jQuery
You might like
php array_walk() 数组函数
2011/07/12 PHP
ThinkPHP 防止表单重复提交的方法
2011/08/08 PHP
php之XML转数组函数的详解
2013/06/07 PHP
调试PHP程序的多种方法介绍
2014/11/06 PHP
php+redis实现多台服务器内网存储session并读取示例
2017/01/12 PHP
JS运行耗时操作的延时显示方法
2010/11/19 Javascript
对xmlHttp对象的理解
2011/01/17 Javascript
AngularJS语法详解
2015/01/23 Javascript
深入浅出理解javaScript原型链
2015/05/09 Javascript
coffeescript使用的方式汇总
2015/08/05 Javascript
javascript代码调试之console.log 用法图文详解
2016/09/30 Javascript
移动前端图片压缩上传的实例
2017/12/06 Javascript
基于vue2.0动态组件及render详解
2018/03/17 Javascript
vue.js指令v-for使用以及下标索引的获取
2019/01/31 Javascript
原来JS还可以这样拆箱转换详解
2019/02/01 Javascript
js+html5 canvas实现ps钢笔抠图
2019/04/28 Javascript
JQuery事件委托原理与用法实例分析
2019/05/13 jQuery
Vue实现简单计算器案例
2020/02/25 Javascript
vue + node如何通过一个Txt文件批量生成MP3并压缩成Zip
2020/06/02 Javascript
DWR内存兼容及无法调用问题解决方案
2020/10/16 Javascript
Python实现抓取百度搜索结果页的网站标题信息
2015/01/22 Python
遍历python字典几种方法总结(推荐)
2016/09/11 Python
详解用Python处理HTML转义字符的5种方式
2017/12/27 Python
python实现K最近邻算法
2018/01/29 Python
python3.6使用pymysql连接Mysql数据库
2018/05/25 Python
Python中的十大图像处理工具(小结)
2019/06/10 Python
pyinstaller打包单个exe后无法执行错误的解决方法
2019/06/21 Python
python super函数使用方法详解
2020/02/14 Python
Python全面分析系统的时域特性和频率域特性
2020/02/26 Python
django在开发中取消外键约束的实现
2020/05/20 Python
Python定义一个Actor任务
2020/07/29 Python
opencv python 对指针仪表读数识别的两种方式
2021/01/14 Python
纯css实现照片墙3D效果的示例代码
2017/11/13 HTML / CSS
还款承诺书范本
2015/01/20 职场文书
2016感恩母亲节校园广播稿
2015/12/17 职场文书
推荐六本经典文学奖书籍:此生必读
2019/08/22 职场文书