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 相关文章推荐
Ext JS Grid在IE6 下宽度的问题解决方法
Feb 15 Javascript
JQuery Study Notes 学习笔记(一)
Aug 04 Javascript
extjs中grid中嵌入动态combobox的应用
Jan 01 Javascript
javascript动态加载三
Aug 22 Javascript
jquery实现点击其他区域时隐藏下拉div和遮罩层的方法
Dec 23 Javascript
JS简单实现仿百度控制台输出信息效果
Sep 04 Javascript
原生Javascript和jQuery做轮播图简单例子
Oct 11 Javascript
axios post提交formdata的实例
Mar 16 Javascript
JavaScript面试出现频繁的一些易错点整理
Mar 29 Javascript
全面解析vue router 基本使用(动态路由,嵌套路由)
Sep 02 Javascript
解决element ui select下拉框不回显数据问题的解决
Feb 20 Javascript
详解如何在Javascript中使用Object.freeze()
Oct 18 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 Session 变量的使用方法详解与实例代码
2013/09/11 PHP
五款PHP代码重构工具推荐
2014/10/14 PHP
PHP中如何判断exec函数执行成功?
2016/08/04 PHP
Laravle eloquent 多对多模型关联实例详解
2017/11/22 PHP
laravel 解决Eloquent ORM的save方法无法插入数据的问题
2019/10/21 PHP
JS获取整个页面文档的实现代码
2011/12/15 Javascript
ExtJS实现文件下载的方法实例
2013/11/09 Javascript
node.js正则表达式获取网页中所有链接的代码实例
2014/06/03 Javascript
javascript引擎长时间独占线程造成卡顿的解决方案
2014/12/03 Javascript
js代码实现无缝滚动(文字和图片)
2015/08/20 Javascript
jQuery绑定事件监听bind和移除事件监听unbind用法实例详解
2016/01/19 Javascript
javascript执行环境及作用域详解
2016/05/05 Javascript
ng-options和ng-checked在表单中的高级运用(推荐)
2017/01/21 Javascript
jQuery插件FusionWidgets实现的Bulb图效果示例【附demo源码下载】
2017/03/23 jQuery
vue实现app页面切换动画效果实例
2017/05/23 Javascript
详解tween.js 中文使用指南
2018/01/05 Javascript
jQuery动态添加li标签并添加属性和绑定事件方法
2018/02/24 jQuery
深入了解js原型模式
2019/05/30 Javascript
JS关闭子窗口并且刷新上一个窗口的实现示例
2020/03/10 Javascript
Python实现的中国剩余定理算法示例
2017/08/05 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
2019/04/30 Python
用python建立两个Y轴的XY曲线图方法
2019/07/08 Python
Python图像处理之图片文字识别功能(OCR)
2019/07/30 Python
安装多个版本的TensorFlow的方法步骤
2020/04/21 Python
Django ORM 查询表中某列字段值的方法
2020/04/30 Python
pyecharts在数据可视化中的应用详解
2020/06/08 Python
python名片管理系统开发
2020/06/18 Python
如何使用amaze ui的分页样式封装一个通用的JS分页控件
2020/08/21 HTML / CSS
请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
2015/07/16 面试题
试解释COMMIT操作和ROLLBACK操作的语义
2014/07/25 面试题
《陋室铭》教学反思
2014/02/26 职场文书
优秀员工推荐信
2014/05/10 职场文书
企业安全生产目标责任书
2014/07/23 职场文书
电影开国大典观后感
2015/06/04 职场文书
怎样写好工作计划
2019/04/10 职场文书
62句有关感恩节文案(推荐收藏)
2019/11/28 职场文书