我正在构建一个暴露Observable的服务.在这个服务中,我接收外部函数调用,它应该触发Observable的下一个调用,以便各种消费者获得订阅事件.在Observer构造函数中,我可以调用next,一切都很好,但是如何在构造函数外部访问它,以便外部触发器可以触发下一个调用?
private myObservable$: Observable<any>;
Run Code Online (Sandbox Code Playgroud)
在服务初始化期间我做
this.myObservable$ = new Observable(observer => {
observer.next("initial message");
}
Run Code Online (Sandbox Code Playgroud)
然后在同一服务的其他方法中,我希望能够执行类似的操作
this.myObservable$.observer.next("next message");
Run Code Online (Sandbox Code Playgroud)
以上显然不起作用,但我怎样才能实现这个目标呢?
我假设我缺少一些基本的东西,因为必须有一种方法可以在Observable的初始构造函数之外发出更多消息
其他平台工作正常...但我在浏览器平台上工作时遇到了问题.
如果我运行cordova平台添加浏览器,它会创建dir,复制所有文件,除了控制台输出"Error loading cordova-browser"之外,大多数情况看起来都很正常.
如果我然后运行准备或任何我得到黄色相同的错误
加载cordova-browser时出错
如果我运行cordova要求......同样的事情,说错误加载cordova浏览器
我在Node v6.2.0和Cordova v6.4.0上
--update如果我继续删除并添加平台的东西似乎工作,ts转换和一切更新和正确移动,我可以从www文件夹运行,一切正常.如果我只是运行prepare或build,平台/浏览器中的文件不会更新.
我正在努力在Angular 2.4.2中导航期间清除URL参数.我已尝试附加每个选项以清除下面导航线中的参数,或者使用导航或navigateByUrl中的任何混合,但无法弄清楚如何完成.
this.router.navigateByUrl(this.router.url, { queryParams: {}, preserveQueryParams: false });
Run Code Online (Sandbox Code Playgroud)
作为一个例子,我在路线,/section1/page1?key1=abc&key2=def并希望保持在相同的路线,但删除所有的url参数,所以最终的结果应该是/section/page1
我有一个Web前端调用ASP Web Api 2后端.使用ASP Identity管理身份验证.对于我正在创建的一些控制器,我需要知道用户正在进行呼叫.我不想创建一些奇怪的模型来传递,包括用户的身份(我甚至不存储在客户端).
所有对API的调用都是使用持票令牌授权的,我的想法是控制器应该能够根据这个确定用户上下文,但我不知道如何实现.我搜索过,但我不知道我在搜索什么,但没有发现任何相关内容.我想要......
public async Task<IHttpActionResult> Post(ApplicationIdentity identity, WalkthroughModel data)
Run Code Online (Sandbox Code Playgroud)
更新
我发现下面看起来很有希望...但是值总是为空!我的控制器继承自ApiController并具有Authorize标头.
var userid = User.Identity.GetUserId();
Run Code Online (Sandbox Code Playgroud)
更新2
我还尝试了在ApiController操作中获取当前用户的所有解决方案,而没有将userID作为参数传递但是没有工作.无论我获得的身份是有效和身份验证的,但具有空UserID
更新3
这就是我现在所处的位置.
[Authorize]
[Route("Email")]
public async Task<IHttpActionResult> Get()
{
var testa = User.Identity.GetType();
var testb = User.Identity.GetUserId();
var testc = User.Identity.AuthenticationType;
var testd = User.Identity.IsAuthenticated;
return Ok();
}
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)testa = Name: ClaimsIdentity, testb = null, testc = Bearer, testd = true
用户显然已通过身份验证,但我无法检索其用户ID.
更新4
我找到了答案,但我真的很不满意......
ClaimsIdentity identity = (ClaimsIdentity)User.Identity;
string username = identity.Claims.First().Value;
Run Code Online (Sandbox Code Playgroud)
这让我获得了没有任何数据库调用的用户名,但它看起来非常笨拙,将来很难支持.如果有人有更好的答案会爱. …
我有一个Cordova/PhoneGap应用程序,它使用相机拍摄照片.我需要访问此图片才能发送到我的服务器.
对于Android我只是使用 $cordovaFile.readAsDataURL(cordova.file.dataDirectory, fileName)
然而; 在iOS上,文件名不会回来.我的iOS返回值显示路径为
资产库://asset/asset.JPG ID = 539425FE-43AA-48E7-9865-D76348208AC7及EXT = JPG
如何访问和阅读此图像?我更喜欢坚持使用$ cordovaFile,但只是想让它发挥作用.
我正在使用CordovaCameraPreview插件,我可以从图片处理程序处理程序回来的最好的东西似乎形成类似于:
assets-library://asset/asset.JPG?id = 990355E1-200A-4E35-AAA1-7D461E3999C8&ext = JPG assets-library://asset/asset.JPG?id = C49FF0EB-CCCB-45B2-8577-B13868D8DB29&ext = JPG
如何将其转换为我可以使用$ cordovaFile读取的文件名和路径?根据他们的文档(http://ngcordova.com/docs/plugins/file/),看起来我需要使用他们的一个路径进行文件系统布局.它在使用cordova.file.dataDirectory的Android上工作正常,但无法弄清楚如何在iOS上访问
我也尝试过使用window.resolveLocalFileSystemURL(path)但是我的结果是未定义的.
更新
我觉得我越来越近......使用window.resolveLocalFileSystemURL(path,resolveOnSuccess, resOnError);我获得更多信息
name: "assets-library"
fullPath: "/asset/asset.JPG?id=711B4C9D-97D6-455A-BC43-C73059A5C3E8&ext=JPG"
name: "asset.JPG?id=711B4C9D-97D6-455A-BC43-C73059A5C3E8&ext=JPG"
nativeURL: "assets-library://asset/asset.JPG?id=711B4C9D-97D6-455A-BC43-C73059A5C3E8&ext=JPG"
Run Code Online (Sandbox Code Playgroud)
看起来我现在需要使用fullPath但仍无法弄清楚如何使用$ cordovaFile访问
如果我尝试使用$cordovaFile.readAsDataURL(cordova.file.dataDirectory, data.name)data.name是asset.JPG?id = 711B4C9D-97D6-455A-BC43-C73059A5C3E8&ext = JPG我得到一个文件未找到错误
更新2
我尝试使用http://ngcordova.com/docs/plugins/file/上提供的每个文件系统布局,并在每个文件系统布局上收到相同的文件未找到错误.仍然不知道如何使用$ cordovaFile访问资产库中的文件
花了几个小时后,用ngTemplateOutlets,componentFactoryResolvers击倒了奇怪的兔子洞,并用ViewChild奇怪的东西围绕着......我在想必须有更好的方法.
我有一个组件,其html模板变得越来越大.纯粹出于组织目的,我想将一些html移动到子模板(其他文件)中.然后,我想在我的主模板中只有一行来引入它们,但是所有内容的范围和上下文应该保持不变.
我可以通过将所有内容包装在自己的组件中来实现它,但这似乎是浪费,我需要在整个地方安装@Output eventEmitters,看起来像是浪费.
我发现最接近"好"的是[innerHtml],但显然这不起作用,因为Angular2不会处理它所引发的html.我真的很惊讶没有直接的方法来做这个...它不需要做任何思考只是一种简单的方法来注入一些正常处理的内联文本.
最佳解决方案看起来像
<div>
all my regular content
</div>
<template [ngExternalTemplate]="./app/home/templates/my-template.html"></template>
Run Code Online (Sandbox Code Playgroud)
并且在该模板中注入的所有html都可以访问,并且能够访问正常内联html所具有的范围和上下文中的所有内容.
关于如何解决这个问题的任何想法?我讨厌看到html变得庞大,但实际上它不应该分成多个组件,因为它们都在管理相同的视图.
作为最后的手段,我想我可以用gulp取代一点动作,但这似乎超级hacky.
我有一个有角度的页面,home,由2个组件和一个路由器插座组成
<div class="home-container">
<header></header>
<sub-header></sub-header>
<router-outlet></router-outlet>
</div>
Run Code Online (Sandbox Code Playgroud)
我希望上面的家用容器始终至少是全屏高度.标题应该显示,然后是子标题,那么路由器出口的内容应该总是至少填满屏幕的其余部分(如果当然有更多的内容,则更多).
通常这很容易,但似乎路由器插座搞乱了.可以看到示例http://plnkr.co/edit/56k9ZabLAGujBoX8Lsas,点击运行然后单击"英雄"链接进行路由.在这个例子中,我不希望Heroes div比屏幕更高,并且不明白它为什么.
我完成这个任务的风格是.(假设路由器插座位于'my-page')
html, body {
height: 100%;
}
.home-container {
height: 100%;
}
.my-page {
height: 100%;
}
Run Code Online (Sandbox Code Playgroud)
我的期望显然是家庭容器是全屏,显示标题,显示子标题,然后我的页面填充至少垂直高度的其余部分.
但实际发生的情况是,有一个可用高度的滚动条看起来与我的标题和子标题相同.
这个plnkr http://plnkr.co/edit/56k9ZabLAGujBoX8Lsas说明了我的意思.如果单击"运行",然后单击"英雄"链接,您将看到路由器插座内容,在本例中为heroes-list.component,带有绿色背景.我不明白为什么当一切都设置为100%时,这里的绿色在屏幕下方流血
更新我尝试在此嵌套中使用各种不同的CSS属性到不同的级别.包括100vh vs 100%,min-height vs height,以及body/html/home-container/my-page的每个组合.我也尝试过与Angular的CSS :host相同的结果,没有什么不同
Update2如果我将它移出元素,那么一切都按照您的预期运行,并且没有垂直滚动条.关于路由器出口包装器的东西在某处增加了垂直空间,但我无法弄清楚导致它的位置或原因.
最终更新以下答案可能对某些应用程序很有用,但我最终只是通过给.my-page指定一个高度来解决它,这样height: calc(100vh - $headerheight - $subheaderheight)就可以完成工作了
我正在开发一个新的Android设备的应用程序(在所有其他我从来没有这个问题).
它正在运行4.2.2我启用了开发人员模式并允许usb调试(我收到启用usb调试的状态通知)
然而,在chrome://检查屏幕保持在下面两条消息之间交替,似乎它无法弥补它的想法!
我已经尝试拔掉并重新启动一切无济于事
当我插入设备时,我会按顺序在设备系统上看到以下状态消息
如何在此设备上访问chrome inspect?我现在使用的是logcat,但它的功能远不如chrome dev工具.
我有一个运行Cordova CLI 6.4.0的Cordova应用程序.在加载过程中,有一个空白的白色屏幕,在启动屏幕后加载4-6秒.同样的事情发生在app重新加载期间.在platform.ready事件之前或之内,没有事件从应用程序触发.在搜索之后,人们对类似问题似乎取得了一些成功,所有这些都围绕着启动屏幕以下配置选项,没有任何建议或想法有效.
更新
我似乎取得了一些进展,我想我更了解这里发生了什么.我在另一篇文章中将以下行添加到我的config.xml中
<preference name="AutoHideSplashScreen" value="false" />
<preference name="SplashScreenDelay" value="10000"/>
Run Code Online (Sandbox Code Playgroud)
现在,使用这两个的行为是显示启动画面(很长一段时间,通常大约9秒),然后Splash消失,我的应用程序加载.所以它不再是邪恶的白色屏幕,而只是一个非常慢的加载应用程序,这是我的问题.
/更新
启动屏幕 - > 4-6秒空白屏幕 - >然后应用程序加载和deviceReady触发.这种情况发生在SplashScreenDelay = 2000
或者它根本不会显示启动画面,而是在应用程序加载之前有8-9秒的空白屏幕.SplashScreenDelay = 0会发生这种情况
我在我的主应用程序的构造函数和platform.ready上有console.logs,直到白色的死亡屏幕被解决并消失之前都没有激活.
我尝试了以下选项
<preference name="SplashScreen" value="screen"/>
<preference name="SplashScreenDelay" value="2000" />
Run Code Online (Sandbox Code Playgroud)
和
<preference name="SplashScreenDelay" value="0" />
Run Code Online (Sandbox Code Playgroud)
这是非常令人困惑的,因为它实际上并不是我的应用程序很慢...它只是加载位,在启动之前在启动页面和应用程序加载之间有一个空白的白屏.我愿意尝试任何想法,因为它在这个状态下基本上是不可释放的.
这在iOS上根本不会发生,构建和设置都完全相同,这是Android特有的问题.我运行的设备是Moto E2.
我正在使用Ionic,下面是一个包含插件的列表,因为它似乎是目前最可能的罪魁祸首.我将不得不在没有某些插件的情况下测试所有内容,看看它是如何执行的.
cordova-plugin-console 1.0.5 "Console"
cordova-plugin-device 1.1.4 "Device"
cordova-plugin-facebook4 1.7.4 "Facebook Connect"
cordova-plugin-splashscreen 4.0.1 "Splashscreen"
cordova-plugin-statusbar 2.2.1 "StatusBar"
cordova-plugin-whitelist 1.3.1 "Whitelist"
ionic-plugin-keyboard 2.2.1 "Keyboard"
Run Code Online (Sandbox Code Playgroud)
这是我的完整图标/启动定义.
<platform name="android">
<allow-intent href="market:*" />
<icon platform="android" src="resources/icon.png" />
<icon platform="android" qualifier="ldpi" src="resources/icons/android/icon-36-ldpi.png" /> …Run Code Online (Sandbox Code Playgroud) 我在AWS Elastic Beanstalk上运行了一个Node服务器.我的一个端点接受巨大的有效负载,功能本身非常慢且冗长,并且可能需要超过10分钟.
由于业务需求,它必须保留为单个HTTP POST,并且不能拆分为任何小的.
在较大的通话中,我获得了504 GATEWAY TIMEOUT,总是在60秒左右.我尝试使用Elastic Beanstalk Load Balancer部分中的超时设置无效,似乎最长的超时持续时间是60秒.
我确实在https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/config-idle-timeout.html上的文档中看到了一个有希望的解决方案
要确保文件上载等冗长的操作有时间完成,请在每个空闲超时时间过去之前发送至少1个字节的数据
这听起来就像我需要的,但我不知道如何完成
1)如何从我的节点应用程序"发送至少1个字节的数据"以确保会话保持活动并且在一分钟后不会超时