我想将从服务器检索到的一些HTML插入到angular2中的DOM元素中.我似乎无法找出最佳/正确的方法来做到这一点.
我不能只将{{my_data}}放入模板中,因为angular 2会自动转义HTML.
我试图编写一个html-unsafe指令,它只是直接为元素的innerHTML赋值:
/// <reference path="../../typings/typings.d.ts" />
import {Directive} from 'angular2/angular2';
import {ElementRef} from 'angular2/core';
@Directive({
selector: "[html-unsafe]",
properties: ['htmlUnsafe']
})
export class HtmlUnsafe{
constructor(private elem: ElementRef){
}
set htmlUnsafe(value){
setTimeout(() => {
this.elem.nativeElement.innerHTML = value;
},0);
}
}
Run Code Online (Sandbox Code Playgroud)
所以现在在我的模板中我有类似的东西
<td [html-unsafe]="my_data"></td>
Run Code Online (Sandbox Code Playgroud)
这是有效的,但我不确定这是否正确,并且setTimeout似乎是一个奇怪的解决方法.如果没有setTimeout,它看起来this.elem.nativeElement实际上并不是指DOM元素,而是指某种临时元素.
是否有更"正确"的angular2方式简单地将HTML插入DOM?为什么我需要在setTimeout中包装DOM操作?
我正在尝试使用play-reactivemongo和reactivemongo-extensions将Rails/Mongodb应用程序迁移到Play 2.3.在建模我的数据时,我遇到了一个问题,即序列化和反序列化Map [Int,Boolean].
当我尝试通过宏来定义我的格式时
implicit val myCaseClass = Json.format[MyCaseClass]
Run Code Online (Sandbox Code Playgroud)
其中MyCaseClass有一些字符串字段,一个BSONObjectID字段,以及编译器抱怨的Map [Int,Boolean]字段:
No Json serializer found for type Map[Int,Boolean]. Try to implement an implicit Writes or Format for this type.
No Json deserializer found for type Map[Int,Boolean]. Try to implement an implicit Reads or Format for this type.
Run Code Online (Sandbox Code Playgroud)
查看Play in Reads.scala中的源代码,我看到为Map [String,_]定义了一个Read,但没有为Map [Int,_]定义.
Play是否有字符串映射的默认读/写,而其他简单类型没有?
我不完全理解play定义的Map [String,_],因为我对scala相当新.我如何将其转换为Map [Int,_]?如果由于某些技术原因这是不可能的,我如何定义Map [Int,Boolean]的读/写?
从激活器控制台,这工作:
scala> import play.api.libs.json._
import play.api.libs.json._
scala> val testVal = Some("foo")
testVal: Some[String] = Some(foo)
scala> Json.obj("myJson" -> testVal)
res0: play.api.libs.json.JsObject = {"myJson":"foo"}
Run Code Online (Sandbox Code Playgroud)
这也有效:
scala> Json.obj("myJson" -> testVal.get)
res3: play.api.libs.json.JsObject = {"myJson":"foo"}
Run Code Online (Sandbox Code Playgroud)
这失败了:
scala> Json.obj("myJson" -> testVal.getOrElse(""))
<console>:12: error: type mismatch;
found : Object
required: play.api.libs.json.Json.JsValueWrapper
Json.obj("myJson" -> testVal.getOrElse(""))
Run Code Online (Sandbox Code Playgroud)
但这有效:
scala> val testVal2 = testVal.getOrElse("")
testVal2: String = foo
scala> Json.obj("myJson" -> testVal2)
res2: play.api.libs.json.JsObject = {"myJson":"foo"}
Run Code Online (Sandbox Code Playgroud)
为什么编译器拒绝我的第三个例子?testVal.getOrElse("")求值为String,为什么编译器认为它Object在上面的第三个例子中呢?
我有一个打字稿函数,它采用通用类型和该通用类型的键。我限制该键,以便该函数仅接受其值属于某种类型的键。当使用约束键访问通用对象时,我没有得到预期的类型作为回报。
如何将通用对象的键限制为特定值类型并在通用函数中访问该值?
例如:
function onlyTakesADateKey<T, K extends keyof T>(item: T, key: T[K] extends Date ? K : never): void {
//I've constrained `key` to ensure that item[key] is a Date but this doesn't get typed as a Date
const shouldBeADateButIsNot = item[key]
//Property 'getTime' does not exist on type 'T[T[K] extends Date ? K : never]'.ts(2339)
shouldBeADateButIsNot.getTime()
}
const foo = { key1: "asdf", key2: new Date() }
//Argument of type 'string' is not assignable to parameter of type 'never'.ts(2345) …Run Code Online (Sandbox Code Playgroud) 我试图在弹性beanstalk Docker实例上配置nginx以允许使用websockets.使用此处找到的信息,我将.ebextensions/01_files.config添加到我正在部署的zip中.
该zip包含.ebextensions/01_files.config,Dockerfile和我的应用程序的tgz.
01_files.config的内容如下:
files:
"/etc/nginx/conf.d/websocketupgrade.conf" :
mode: "000755"
owner: root
group: root
content: |
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
Run Code Online (Sandbox Code Playgroud)
弹性豆茎似乎忽略了我的.ebextensions.永远不会写文件/etc/nginx/conf.d/websocketupgrade.conf.
在弹性beanstalk上使用.ebextensions与Docker容器的正确方法是什么?
nginx amazon-web-services websocket docker amazon-elastic-beanstalk
我正在编写一个Play 2.3应用程序,它提供由mongodb支持的JSON.来自数据库的一些文档包含敏感字段.我希望能够使用这些文档服务器端,但向客户端发送有限的JSON视图.关于读取/写入组合器的文档讨论了定义隐式读取和写入,它可以很好地用于向数据库发送数据和从数据库发送数据,但不能完全满足我的需求.
我想要做的是定义任何数量的其他写入,我可以使用像json"views"将特定的转换或模型子集发送到客户端.在Rails中,我使用JBuilder来实现此目的.
尝试显式传递不同的Writes toJson不会给我预期的行为.采取这个简单的控制器动作,应该编写所有用户ID和用户名的JSON数组:
def listUsers = Action.async {
val testCustomWrite: Writes[User] = (
(__ \ "id").write[String] and
(__ \ "username").write[String]) { user: User =>
(user._id.toString(), user.username)
}
UserDao.findAll().map {
case Nil => Ok(Json.toJson(""))
case users => Ok(Json.toJson(users)(testCustomWrite))
}
}
Run Code Online (Sandbox Code Playgroud)
这无法编译
type mismatch;
[error] found : play.api.libs.json.Writes[models.User]
[error] required: play.api.libs.json.Writes[List[models.User]]
[error] case users => Ok(Json.toJson(users)(testCustomWrite))
Run Code Online (Sandbox Code Playgroud)
该方式toJson处理写对象的列表依赖于隐式数组作家依赖于一个隐含的类型作家.我可以重写上面的内容,val testCustomWrite: Writes[List[User]]但这不是正确的解决方案,因为Play已经为隐式写入提供了一个数组包装器.
是否有一种在Play2中呈现多个JSON"视图"的首选方法?
json ×3
scala ×3
typescript ×2
angular ×1
docker ×1
dom ×1
javascript ×1
nginx ×1
websocket ×1