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代码混淆综合解决方案-Javascript在线混淆器
Dec 18 Javascript
HTML-CSS群中单选引发的“事件”
Mar 05 Javascript
Jquery 滑入滑出效果实现代码
Mar 27 Javascript
jquery 图片截取工具jquery.imagecropper.js
Apr 09 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
Jan 23 Javascript
jquery遍历之parent()和parents()的区别及parentsUntil()方法详解
Dec 02 Javascript
Javascript设计模式之观察者模式的多个实现版本实例
Mar 03 Javascript
AngularJS入门教程之ng-class 指令用法
Aug 01 Javascript
Node.js的环境安装配置(使用nvm方式)
Oct 11 Javascript
通过V8源码看一个关于JS数组排序的诡异问题
Aug 14 Javascript
JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例
Feb 21 Javascript
javascript中undefined的本质解析
Jul 31 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 中的面向对象编程:通向大型 PHP 工程的办法
2006/12/03 PHP
三种php连接access数据库方法
2013/11/11 PHP
网页上facebook分享功能具体实现
2014/01/26 PHP
php实现mysql数据库操作类分享
2014/02/14 PHP
PHP读取文件内容的五种方式
2015/12/28 PHP
laravel5环境隐藏index.php后缀(apache)的方法
2019/10/12 PHP
可插入图片的TEXT文本框
2013/12/27 Javascript
jQuery制作简单柱状图实例
2015/01/28 Javascript
jquery使用each方法遍历json格式数据实例
2015/05/18 Javascript
JavaScript实现选择框按比例拖拉缩放的方法
2015/08/04 Javascript
js只执行1次的函数示例
2016/07/20 Javascript
微信小程序五星评分效果实现代码
2017/04/06 Javascript
在Js页面通过POST传递参数跳转到新页面详解
2017/08/25 Javascript
微信小程序实现流程进度的图样式功能
2018/01/16 Javascript
vue-cli脚手架config目录下index.js配置文件的方法
2018/03/13 Javascript
vue实现点击当前标签高亮效果【推荐】
2018/06/22 Javascript
seajs和requirejs模块化简单案例分析
2019/08/26 Javascript
p5.js临摹旋转爱心
2019/10/23 Javascript
React实现评论的添加和删除
2020/10/20 Javascript
win7上python2.7连接mysql数据库的方法
2017/01/14 Python
python3.6数独问题的解决
2019/01/21 Python
详解pandas删除缺失数据(pd.dropna()方法)
2019/06/25 Python
Pytorch 实现自定义参数层的例子
2019/08/17 Python
python代码打印100-999之间的回文数示例
2019/11/24 Python
python实现删除列表中某个元素的3种方法
2020/01/15 Python
html5中JavaScript removeChild 删除所有节点
2014/05/16 HTML / CSS
生产厂长岗位职责
2014/02/21 职场文书
治安消防安全责任书
2014/07/23 职场文书
机关党员公开承诺书
2014/08/30 职场文书
个人查摆剖析材料
2014/10/16 职场文书
表扬稿范文
2015/01/17 职场文书
死亡赔偿协议书
2015/01/28 职场文书
2015年全国保险公众宣传日活动方案
2015/05/06 职场文书
2016年端午节校园广播稿
2015/12/18 职场文书
导游词之淮安明祖陵
2019/11/25 职场文书
Pandas实现批量拆分与合并Excel的示例代码
2022/05/30 Python