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 相关文章推荐
了不起的node.js读书笔记之mongodb数据库交互
Dec 22 Javascript
JavaScript中的this机制
Jan 30 Javascript
js获取Html元素的实际宽度高度的方法
May 19 Javascript
基于Node.js的JavaScript项目构建工具gulp的使用教程
May 20 Javascript
JS集成fckeditor及判断内容是否为空的方法
May 27 Javascript
详解Angular2中的编程对象Observable
Sep 17 Javascript
vue项目中做编辑功能传递数据时遇到问题的解决方法
Dec 19 Javascript
如何学JavaScript?前辈的经验之谈
Dec 28 Javascript
jQuery实现复选框的全选和反选
Feb 02 Javascript
JS中setTimeout和setInterval的最大延时值详解
Feb 13 Javascript
详解js中let与var声明变量的区别
Apr 05 Javascript
Nuxt.js 静态资源和打包的操作
Nov 06 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
解决ajax+php中文乱码的方法详解
2013/06/09 PHP
PHP实现的QQ空间g_tk加密算法
2015/07/09 PHP
PHP简单检测网址是否能够正常打开的方法
2016/09/04 PHP
php获取今日开始时间和结束时间的方法
2017/02/27 PHP
PHP扩展mcrypt实现的AES加密功能示例
2019/01/29 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
2019/05/13 PHP
Javascript 通过json自动生成Dom的代码
2010/04/01 Javascript
js 判断脚本加载完毕的代码
2011/07/13 Javascript
字符串的replace方法应用浅析
2011/12/06 Javascript
JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
2012/08/14 Javascript
jquery ajax例子返回值详解
2012/09/11 Javascript
jquery的map与get方法详解
2013/11/04 Javascript
jQuery中对未来的元素绑定事件用bind、live or on
2014/04/17 Javascript
禁用页面部分JavaScript不是全部而是部分
2014/09/03 Javascript
详解JavaScript对象类型
2016/06/16 Javascript
微信小程序 教程之模块化
2016/10/17 Javascript
解决Webpack 热部署检测不到文件变化的问题
2018/02/22 Javascript
jquery.pagination.js分页使用教程
2018/10/23 jQuery
小程序获取当前位置加搜索附近热门小区及商区的方法
2019/04/08 Javascript
使用axios请求接口,几种content-type的区别详解
2019/10/29 Javascript
Angular8引入百度Echarts进行图表分析的实现代码
2019/11/27 Javascript
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
Python的dict字典结构操作方法学习笔记
2016/05/07 Python
wxpython中Textctrl回车事件无效的解决方法
2016/07/21 Python
Python中属性和描述符的正确使用
2016/08/23 Python
python3中zip()函数使用详解
2018/06/29 Python
python和opencv实现抠图
2018/07/18 Python
python爬虫模拟浏览器访问-User-Agent过程解析
2019/12/28 Python
python pillow库的基础使用教程
2021/01/13 Python
美国最大的购物网站:Amazon.com(亚马逊美国)
2020/05/23 全球购物
个人简历中的自我评价范例
2013/10/29 职场文书
实习教师自我鉴定
2013/12/12 职场文书
课改心得体会范文
2016/01/25 职场文书
2017年寒假少先队活动总结
2016/04/06 职场文书
css display table 自适应高度、宽度问题的解决
2021/05/07 HTML / CSS
pandas中关于apply+lambda的应用
2022/02/28 Python