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 相关文章推荐
TreeView 用法(有代码)(asp.net)
Jul 15 Javascript
增强用户体验友好性之jquery easyui window 窗口关闭时的提示
Jun 22 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
Dec 10 Javascript
固定背景实现的背景滚动特效示例分享
May 19 Javascript
php读取sqlite数据库入门实例代码
Jun 25 Javascript
JS验证IP,子网掩码,网关和MAC的方法
Jul 02 Javascript
js实现滚动条滚动到某个位置便自动定位某个tr
Jan 20 Javascript
简单实现Vue的observer和watcher
Dec 21 Javascript
基于vue2.0+vuex+localStorage开发的本地记事本示例
Feb 28 Javascript
vue调用高德地图实例代码
Apr 28 Javascript
一篇文章让你彻底弄懂JS的事件冒泡和事件捕获
Aug 14 Javascript
值得收藏的vuejs安装教程
Nov 21 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
CI框架学习笔记(一) - 环境安装、基本术语和框架流程
2014/10/26 PHP
PHP数组式访问接口ArrayAccess用法分析
2017/12/28 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
2019/10/14 PHP
创建一个复制UBB软件信息的链接或按钮的js代码
2008/01/06 Javascript
JavaScript在IE和Firefox浏览器下的7个差异兼容写法小结
2010/06/18 Javascript
浏览器常用高宽的jquery插件
2011/02/24 Javascript
js整数字符串转换为金额类型数据(示例代码)
2013/12/26 Javascript
jquery动态添加option示例
2013/12/30 Javascript
常用的jquery模板插件——jQuery Boilerplate介绍
2014/09/23 Javascript
Uploadify上传文件方法
2016/03/16 Javascript
jQuery选择器基础入门教程
2016/05/10 Javascript
基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息
2016/08/29 Javascript
js当前页面登录注册框,固定div,底层阴影的实例代码
2016/10/04 Javascript
Vue2.0基于vue-cli+webpack父子组件通信(实例讲解)
2017/09/14 Javascript
利用Three.js如何实现阴影效果实例代码
2017/09/26 Javascript
Vue学习之axios的使用方法实例分析
2020/01/06 Javascript
JavaScript中的各种宽高属性的实现
2020/05/08 Javascript
详解Python中的元组与逻辑运算符
2015/10/13 Python
python机器学习之贝叶斯分类
2018/03/26 Python
使用Python获取网段IP个数以及地址清单的方法
2018/11/01 Python
python模拟登陆,用session维持回话的实例
2018/12/27 Python
浅谈keras使用预训练模型vgg16分类,损失和准确度不变
2020/07/02 Python
HTML5之SVG 2D入门6—视窗坐标系与用户坐标系及变换概述
2013/01/30 HTML / CSS
html5唤起app的方法
2017/11/30 HTML / CSS
美国高档百货Nordstrom的折扣店:Nordstrom Rack
2017/11/13 全球购物
印度尼西亚手表和包包商店:Urban Icon
2019/12/12 全球购物
Tuckernuck官网:经典的美国品质服装、鞋子和配饰
2021/01/11 全球购物
白酒市场开发计划书
2014/01/09 职场文书
阿德的梦教学反思
2014/02/06 职场文书
厨房领班竞聘演讲稿
2014/04/23 职场文书
四风问题原因分析及整改措施
2014/10/24 职场文书
2014年加油站工作总结
2014/12/04 职场文书
入党宣誓仪式主持词
2015/06/29 职场文书
幼儿园中班班级总结
2015/08/10 职场文书
JS代码编译器Monaco使用方法
2021/06/11 Javascript
Windows Server 2012 R2服务器安装与配置的完整步骤
2022/07/15 Servers