博客 页面 18

对ionic程序启动后白屏时间过长的优化

原因:
猜测是angular加载时间过长

两个方案:
1.把启动页面时间延长。虽然是个掩耳盗铃做做法,但至少能避免长时间白屏的尴尬
2.使用发布版,在编译时添加 –prod参数,能获得发布版的app,比debug版的速度快很多,可以几乎没有白屏,当然发布版是不能进行调试的

angular动态组建

比较好的教程:
https://segmentfault.com/a/1190000009175508

文中总结:
动态加载组件的流程:

1.获取装载动态组件的容器
2.在组件类的构造函数中,注入 ComponentFactoryResolver 对象
3.调用 ComponentFactoryResolver 对象的 resolveComponentFactory() 方法创建 ComponentFactory 对象
4.调用组件容器对象的 createComponent() 方法创建组件并自动添加动态组件到组件容器中
5基于返回的 ComponentRef 组件实例,配置组件相关属性 (可选)
6在模块 Metadata 对象的 entryComponents 属性中添加动态组件
declarations – 用于指定属于该模块的指令和管道列表
entryComponents – 用于指定在模块定义时,需要编译的组件列表。对于列表中声明的每个组件,Angular 将会创建对应的一个 ComponentFactory 对象,并将其存储在 ComponentFactoryResolver 对象中

动态组建要用到的3个功能:

ViewChild:

ViewChild装饰器来获取视图中的模板元素

ViewContainerRef

ComponentFactoryResolve

 

extends和implements区别

http://blog.csdn.net/tolcf/article/details/46135645

extends与implements的不同
1、在类的声明中,通过关键字extends来创建一个类的子类。
一个类通过关键字implements声明自己使用一个或者多个接口。
extends 是继承某个类, 继承之后可以使用父类的方法, 也可以重写父类的方法;
implements 是实现多个接口, 接口的方法一般为空的, 必须重写才能使用
2、extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承
JAVA中不支持多重继承,但是可以用接口 来实现,这样就要用到implements,继承只能继承一个类,
但implements可以实现多个接口,用逗号分开就行了 比如 :
class A extends B implements C,D,E
接口实现的注意点:
a.实现一个接口就是要实现该接口的所有的方法(抽象类除外)。
b.接口中的方法都是抽象的。
c.多个无关的类可以实现同一个接口,一个类可以实现多个无关的接口。

与Extends的不同
extends, 可以实现父类,也可以调用父类初始化 this.parent()。而且会覆盖父类定义的变量或者函数。这样的好处是:架构师定义好接口,让工程师实现就可以了。整个项目开发效率和开发成本大大降低。 implements,实现父类,子类不可以覆盖父类的方法或者变量。即使子类定义与父类相同的变量或者函数,也会被父类取代掉。
这两种实现的具体使用,是要看项目的实际情况,需要实现,不可以修改implements,只定义接口需要具体实现,或者可以被修改扩展性好,用extends。

angular学习难点记录

其他语言转过来比较难理解的地方

1.箭头函数()=>{}

2.观察者对象Observable

使用swift开发cordova IOS插件

http://www.hangge.com/blog/cache/detail_1152.html

http://www.hangge.com/blog/cache/detail_1146.html

android使用wifiManager.getScanResults获取wifi列表失败问题

原来以为是手机原因,后来发现是android 6.0后要求获取WiFi必须打开GPS。。。这是什么坑爹设计?
解决办法就是添加GPS权限:


ionic android运行报错

ionic android运行报错:
Error: cmd: Command failed with exit code 1 Error output:
FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring root project ‘android’.
> You have not accepted the license agreements of the following SDK components:
[Android SDK Platform 25].
Before building your project, you need to accept the license agreements and comp
lete the installation of the missing components using the Android Studio SDK Man
ager.
Alternatively, to learn how to transfer the license agreements from one workstat
ion to another, go to http://d.android.com/r/studio-ui/export-licenses.html

* Try:
Run with –stacktrace option to get the stack trace. Run with –info or –debug
option to get more log output.

百度这个问题出来的第一个是CSDN的瞎扯文章,别看
原因就是没装对应版本的工具或者SDK
解决办法很简单,在SDK Manager安装即可
如上提示[Android SDK Platform 25]就是说没装25版本SDK,对应的就是android7.1.1,勾选安装即可。

ionic打包发布IOS教程

IOS打包教程

https://docs.microsoft.com/en-us/visualstudio/cross-platform/tools-for-cordova/first-steps/ios-guide

 

IOS发布教程

http://www.jianshu.com/p/817686897ec1?open_source=weibo_search

今日坑

1.fs模块不能在浏览器上使用,只能在nodejs运行的后台使用,浏览器使用会报错readFileSync is not a function

事实证明ionic是用不了fs模块的。

2.ES2015使用import xxx from xxx的导入方法,其他版本的导入方式不一样。

ionic2隐藏子页面tabs

网上找到的方法都不太好用,最后在官方github上找到了解决方案。

添加一个  tabsHideOnSubPages: true  即可

@NgModule({
  declarations: [ MyApp ],
  imports: [
    IonicModule.forRoot(MyApp, {
      tabsHideOnSubPages: true,
    }, {}
  )],
  bootstrap: [IonicApp],
  entryComponents: [ MyApp ],
  providers: []
})