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 相关文章推荐
JavaScript TO HTML 转换
Jun 26 Javascript
JavaScript判断窗口是否最小化的代码(跨浏览器)
Aug 01 Javascript
写给想学习Javascript的朋友一点学习经验小结
Nov 23 Javascript
Javascript核心读书有感之表达式和运算符
Feb 11 Javascript
学习Bootstrap组件之下拉菜单
Jul 28 Javascript
深入浅析JavaScript中数据共享和数据传递
Apr 25 Javascript
AngularJS 教程及实例代码
Oct 23 Javascript
node.js基础知识小结
Feb 26 Javascript
VUE.js实现动态设置输入框disabled属性
Oct 28 Javascript
JavaScript变量基本使用方法实例分析
Nov 15 Javascript
webpack+express实现文件精确缓存的示例代码
Jun 11 Javascript
vue集成一个支持图片缩放拖拽的富文本编辑器
Jan 29 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使用Smarty的相关注意事项及访问变量的几种方式
2011/12/08 PHP
Yii2使用自带的UploadedFile实现的文件上传
2016/06/20 PHP
php把时间戳转换成多少时间之前函数的实例
2016/11/16 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
得到文本框选中的文字,动态插入文字的js代码
2007/03/07 Javascript
JavaScript脚本性能优化注意事项
2008/11/18 Javascript
js实现文章文字大小字号功能完整实例
2014/11/01 Javascript
NodeJs下的测试框架Mocha的简单介绍
2017/02/22 NodeJs
深入理解Commonjs规范及Node模块实现
2017/05/17 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
2017/06/15 Javascript
js实现图片上传预览原理分析
2017/07/13 Javascript
vue.js使用v-pre与v-html输出HTML操作示例
2018/07/07 Javascript
在vue项目中使用md5加密的方法
2018/09/14 Javascript
Vue项目从webpack3.x升级webpack4不完全指南
2019/04/28 Javascript
Vue指令之 v-cloak、v-text、v-html实例详解
2019/08/08 Javascript
封装一下vue中的axios示例代码详解
2020/02/16 Javascript
JavaScript中如何调用Java方法
2020/09/16 Javascript
js数组的基本使用总结
2021/01/18 Javascript
举例介绍Python中的25个隐藏特性
2015/03/30 Python
对numpy中shape的深入理解
2018/06/15 Python
python多任务及返回值的处理方法
2019/01/22 Python
python写入文件自动换行问题的方法
2019/07/05 Python
Python 3.8 新功能全解
2019/07/25 Python
Python使用Paramiko控制liunx第三方库
2020/05/20 Python
PyTorch 导数应用的使用教程
2020/08/31 Python
基于HTML5超酷摄像头(HTML5 webcam)拍照功能实现代码
2012/12/13 HTML / CSS
html5实现九宫格抽奖可固定抽中某项奖品
2020/06/15 HTML / CSS
沙特阿拉伯网上购物:Sayidaty Mall
2018/05/06 全球购物
类、抽象类、接口的差异
2016/06/13 面试题
几个数据库方面的面试题
2016/07/01 面试题
计算机科学与技术应届生求职信
2013/11/07 职场文书
新闻学毕业生自荐信
2013/11/15 职场文书
民族团结先进个人材料
2014/02/05 职场文书
党员民主评议个人总结
2014/10/20 职场文书
致男子1500米运动员的广播稿
2019/11/08 职场文书
win10此电脑打不开怎么办 win10双击此电脑无响应的解决办法
2022/07/23 数码科技