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 相关文章推荐
JS解析XML的实现代码
Nov 12 Javascript
离开页面时检测表单元素是否被修改,提示保存的js代码
Aug 25 Javascript
window.name代替cookie的实现代码
Nov 28 Javascript
jquery选择器的选择使用及性能介绍
Jan 16 Javascript
JS操作COOKIE实现备忘记录的方法
Apr 01 Javascript
基于JS实现的笛卡尔乘积之商品发布
May 13 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
May 30 Javascript
JavaScript ES6中CLASS的使用详解
Nov 22 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
Mar 24 jQuery
vue实现表格增删改查效果的实例代码
Jul 18 Javascript
checkbox:click事件触发span元素内容改变的方法
Sep 11 Javascript
微信小程序实现通过双向滑动缩放图片大小的方法
Dec 30 Javascript
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数组一对一替换实现代码
2012/08/31 PHP
PHP执行linux命令常用函数汇总
2016/02/02 PHP
PHP微信红包生成代码分享
2016/10/06 PHP
PHP实现根据数组某个键值大小进行排序的方法
2018/03/13 PHP
laravel框架使用阿里云短信发送消息操作示例
2020/02/15 PHP
jQuery 连续列表实现代码
2009/12/21 Javascript
javascript 拖动表格行实现代码
2011/05/05 Javascript
js下拉选择框与输入框联动实现添加选中值到输入框的方法
2015/08/17 Javascript
javascript实现起伏的水波背景效果
2016/05/16 Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
2016/06/29 Javascript
JS选取DOM元素的简单方法
2016/07/08 Javascript
学习vue.js计算属性
2016/12/03 Javascript
微信小程序 聊天室简单实现
2017/04/19 Javascript
使用 jQuery 实现表单验证功能
2017/07/05 jQuery
Vue项目中quill-editor带样式编辑器的使用方法
2017/08/08 Javascript
解决echarts的多个折现数据出现坐标和值对不上的问题
2018/12/28 Javascript
详解vue中使用vue-quill-editor富文本小结(图片上传)
2019/04/24 Javascript
[01:25:09]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第二场
2014/05/24 DOTA
浅析Python的Django框架中的Memcached
2015/07/23 Python
bpython 功能强大的Python shell
2016/02/16 Python
实例讲解Python编程中@property装饰器的用法
2016/06/20 Python
Python求解任意闭区间的所有素数
2018/06/10 Python
使用python验证代理ip是否可用的实现方法
2018/07/25 Python
Python通过cv2读取多个USB摄像头
2019/08/28 Python
基于打开pycharm有带图片md文件卡死问题的解决
2020/04/24 Python
解决python 执行sql语句时所传参数含有单引号的问题
2020/06/06 Python
基于python实现ROC曲线绘制广场解析
2020/06/28 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
2020/09/03 Python
scrapy-splash简单使用详解
2021/02/21 Python
销售经理工作职责范文
2013/12/03 职场文书
连带责任保证书
2014/04/29 职场文书
预防传染病方案
2014/06/14 职场文书
刑事辩护授权委托书格式
2014/10/13 职场文书
最美劳动诗,致敬所有的劳动者!
2019/07/12 职场文书
浅谈MySQL函数
2021/10/05 MySQL
springcloud整合seata
2022/05/20 Java/Android