小编And*_*ann的帖子

在Typescript中编写NPM模块

我正在研究我的第一个NPM模块.我以前简单地使用过打字稿,但是一个很大的问题是,对于许多模块,没有可用的定义文件.所以我认为用打字稿写我的模块是个好主意.

但是,我找不到有关最佳方法的任何信息.我发现了这个相关问题" 我可以在coffeescript中编写npm包吗? ",人们建议只发布javascript文件.但与coffeescript文件相比,如果在打字稿应用程序中使用打字稿文件,那么打字稿文件实际上可能很有用.

我应该在发布NPM模块时包含Typescript文件,还是应该只发布javascript文件并将生成的.d.ts文件提供给DefinitelyTyped?

javascript node.js npm typescript

93
推荐指数
5
解决办法
3万
查看次数

科尔多瓦错误:不支持使用“ requireCordovaModule”加载非科尔多瓦模块“ q”

我注意到由于以下错误,我们CI上的构建开始失败:

Discovered plugin "cordova-plugin-app-version" in config.xml. Adding it to the project

Installing "cordova-plugin-app-version" for android

Adding cordova-plugin-app-version to package.json
Using "requireCordovaModule" to load non-cordova module "q" is not supported. Instead, add this module to your dependencies and use regular "require" to load it.
[ERROR] Exception: 
The command '/bin/sh -c ionic cordova platforms add android' returned a non-zero code: 1
Run Code Online (Sandbox Code Playgroud)

在iOS和Android上都发生相同的问题。

经过一番挖掘,我发现cordova 9.0.0是最近发布的。

有几个与此问题相关的更改。

  • GH-710 Drop Q依赖性并使用本机承诺
  • GH-707为非Cordova模块弃用requireCordovaModule

我的第一个想法是,某种程度上我们没有锁定cordova版本,但是我们确实将其锁定到cordova@8.1.2了dockerfile中。我也在本地计算机和Cordova版本上进行了测试8.1.2。所以这不是问题。

在查看了更多日志之后,我注意到了一些类似以下的日志:

cordova-android version check failed ("/app/platforms/android/cordova/version"), …

cordova cordova-plugins

53
推荐指数
9
解决办法
4万
查看次数

离子v3中的定制组件

我想创建一个简单的组件并将其包含在页面上.我用ionic g component my-header(ionic-cli v3 beta)创建它,修复了IonicPageModule错误,然后添加到另一个页面.然后我得到这个错误:

Error: Uncaught (in promise): Error: Template parse errors:
'my-header' is not a known element:
1. If 'my-header' is an Angular component, then verify that it is part of this module.
2. If 'my-header' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message.
Run Code Online (Sandbox Code Playgroud)

"MyHeaderComponent"自动添加到@NgModule声明中.

谢谢你的帮助.

编辑:

该组件位于我的components文件夹中:

组件/我的头/我-了header.html

<div>
  {{text}}
</div>
Run Code Online (Sandbox Code Playgroud)

组件/我的头/我-header.module.ts

import { NgModule } from '@angular/core';
import { IonicModule } from …
Run Code Online (Sandbox Code Playgroud)

ionic2 ionic3 angular

22
推荐指数
2
解决办法
3万
查看次数

Typescript 库:隐藏内部导出

我正在用通过 npm 发布的打字稿构建一个库。

在作为库起点的 index.ts 中,导出了所有公共类和枚举。

import { MyClass } from './internal/my-class'
import { MyEnum } from './internal/my-enum'
export { MyClass, MyEnum }
Run Code Online (Sandbox Code Playgroud)

这很有效,但我注意到用户也可以通过使用文件的直接路径来导入内部函数/类等。

// in a project that installed my library as an npm dependency
import { InternalClass } from 'my-lib/dist/internal/internal-class'
Run Code Online (Sandbox Code Playgroud)

有没有办法防止这种情况?

我需要“导出”,InternalClass因为我在整个库中导入和使用它,但我不想公开它。我尝试使用命名空间,但无法真正让它工作。

javascript module shared-libraries typescript

12
推荐指数
2
解决办法
1120
查看次数

如何将参数传递给Ionic2/Angular2中的提供者构造函数?

我试图将我的Ionic2.beta11应用程序移植到新的Ionic2.rc0版本.大多数事情都非常简单,但我对AoT编译器有疑问.

我有一个AuthService:

@Injectable()
export class AuthService {
  constructor(@Inject(Http) http: Http) {
    this.http = http;
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)

我将它注入我的src/app/app.module.ts文件中的应用程序:

@NgModule({
  declarations: [
    MyApp,
    ...
  ],
  imports: [
    IonicModule.forRoot(MyApp)
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp,
    ...
  ],
  providers: [
    AuthService
  ]
})
Run Code Online (Sandbox Code Playgroud)

运行离子服务时一切正常,但是当我尝试构建它时,我收到以下错误:

ngc error: Error: Error at .../.tmp/app/app.module.ngfactory.ts:397:78: Supplied parameters do not match any signature of call target.
Run Code Online (Sandbox Code Playgroud)

396 - 399行:

get _AuthService_74():import44.AuthService {
  if ((this.__AuthService_74 == (null as any))) { (this.__AuthService_74 = new import44.AuthService()); }
  return this.__AuthService_74;
} …
Run Code Online (Sandbox Code Playgroud)

dependency-injection typescript ionic2 angular

10
推荐指数
2
解决办法
8137
查看次数

使ionic2 app完全透明的最佳方法是什么?

我最近遇到了一个名为cordova-plugin-qrscanner(https://github.com/bitpay/cordova-plugin-qrscanner)的相当新的cordova插件.我之前一直在使用其他QR扫描仪,但这些只是覆盖某种原生相机UI,直到QR被扫描然后返回到应用程序.

但是,这个插件的方法有点不同.实际上,相机显示在您的应用程序"后面",您必须使所有内容都透明才能看到它.

这非常有趣,因为您可以使用HTML和CSS轻松添加自定义叠加层.但是,我不太清楚这里最好的方法是什么.

添加插件后,只是调用QRScanner.scan(displayContents);你看不到任何东西,但扫描仪已经在后台运行.然后,我从应用程序中递归删除任何样式(请参阅删除页面中所有样式的最简单方法),并将background-color设置为透明,以查看它是否有效.它确实如此,但我显然仍然可以看到之前显示的文本.

我想我可以创建并推送带有叠加层的新页面,将背景颜色设置为透明,然后在扫描代码后导航回来.但这感觉非常黑客.

有人有更好的解决方案吗?
例如,有没有办法用覆盖层"交换"应用程序的整个可见部分,并在扫描代码后恢复状态?

谢谢你的帮助.

编辑:

它不是同一个插件,但这篇文章与我的问题相关.

http://www.joshmorony.com/ionic-go-create-a-pokemon-go-style-interface-in-ionic-2/

应用css样式有效,但同样,应用程序的其余部分无法使用.

css overlay qr-code cordova ionic2

8
推荐指数
1
解决办法
802
查看次数

打字稿:根据输入值(枚举)返回函数类型

我正在将一些设置存储到本地存储中,并且我想在从/向存储获取(并且理想情况下还插入)值时输入响应。

据我所知,最好的方法似乎是使用函数重载。所以这就是我现在所拥有的并且它有效:

export enum SettingsKey {
  hasOnboarded = 'hasOnboarded',
  phoneNumber = 'phoneNumber'
}

export async function getSetting(storage: Storage, key: SettingsKey.phoneNumber): Promise<string>
export async function getSetting(storage: Storage, key: SettingsKey.hasOnboarded): Promise<boolean>
export async function getSetting(storage: Storage, key: any) {
  return storage.get(key)
}
Run Code Online (Sandbox Code Playgroud)

我不喜欢这个解决方案的一点是,可能会忘记在枚举中添加一个新元素到重载类型定义中。有没有办法强制处理所有枚举值?或者有没有更好的方法来完全做到这一点?

我认为这将是一件简单的事情,从值hasOnboarded到返回类型的映射boolean等,但这显然不是那么容易。

在我看来,条件类型可能会解决这个问题,但我无法完全理解它是如何工作的。

我也看到了这种方法,但这似乎有点过多的开销。

任何见解将不胜感激!

enums overloading typescript typescript-typings conditional-types

7
推荐指数
1
解决办法
2381
查看次数

Ionic - 在另一个视图上刷新时不应用CSS

我目前正在开发我的第一个Ionic App,并且是第一次使用Angular.

我正在使用饼图库在应用程序的仪表板上显示图表.如果我在仪表板上刷新时这很好用,看起来像这样:

https://imgur.com/YUCAO6i,oakGp8c#1

但是,如果我导航到另一个选项卡,让我们说服务器选项卡,然后在那里刷新,则宽度和高度不会应用于仪表板上的图表.相反,它们使用标准宽度和高度(500h x 900w而不是100h x 100w)进行渲染.(见imgur的第二张照片).如果我再次在仪表板上刷新,它们将正常渲染.

我浏览了库的源代码,发现当在仪表板上刷新时,元素[0] .parentElement.offsetWidth等于100,但是如果我在另一个视图上刷新时它是0,那么使用默认值.看起来像饼图指令在另一个视图上无法访问父级.

这是使用的HTML和CSS:

HTML

<div class="pieChart">
    <pie-chart data="server.chartData.cpu" options="chartOptions"></pie-chart>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS

.pieChart {
    height: 100px;
    width: 100px;
    float: left;
}
Run Code Online (Sandbox Code Playgroud)

我试着找几个小时的答案,但我甚至不确定我究竟需要搜索什么.我想出的唯一解决方案是更改pie-chart.js中的默认值,我不想这样做.

编辑

该应用程序是开源的,您可以在我的存储库中找到完整的代码:https://github.com/AndreasGassmann/cloudatcostapp

html css angularjs angular-ui-router ionic

6
推荐指数
1
解决办法
2276
查看次数

如何使用Angular中的异步管道处理布尔可观察对象

我有以下代码:

public obs$: Observable<boolean>
Run Code Online (Sandbox Code Playgroud)
public obs$: Observable<boolean>
Run Code Online (Sandbox Code Playgroud)

它可以按预期工作,但是if看起来有些冗长。

问题是我不能简单地做<div *ngIf="(obs$ | async)">。如果我尝试这样做,它将在observable尚未发出值或值为true的情况下起作用,但如果值为false则它将不起作用,因为if的结果为false且div不是显示。

我假设如果返回虚假值(例如空字符串或0),则会遇到相同的问题。

有没有更好,更轻松的方法呢?

observable rxjs angular

6
推荐指数
2
解决办法
1602
查看次数

在 Web Worker 中发出 HTTP 请求

我第一次尝试在我的节点应用程序中使用网络工作者或线程。我正在使用webworker-threads npm 模块

基本上我希望每个工作人员向服务器发出请求,测量响应时间并将其发送回主线程。

我尝试了很多不同的方法,但我似乎无法让它发挥作用。文档中的基本示例有效。但是当我尝试要求一个模块(在我的例子中为“请求”)时,工作人员似乎停止工作,没有任何错误消息。我在文档中看到 require 在工作人员内部不起作用,所以我尝试了“importScripts()”,它也不起作用。使用线程池时,我尝试使用 .all.eval() 但它也不起作用。

由于这是第一次在节点中使用网络工作线程/线程,我可能会误解如何使用这些东西。这是我尝试过的一个例子:

服务器.js

var Worker = require('webworker-threads').Worker;
var worker = new Worker('worker.js');
Run Code Online (Sandbox Code Playgroud)

工人.js

console.log("before import");
importScripts('./node_modules/request/request.js');
console.log("after import");
Run Code Online (Sandbox Code Playgroud)

这个基本示例仅打印before import然后停止。

javascript concurrency multithreading web-worker node.js

5
推荐指数
1
解决办法
1万
查看次数