我有一个AngularJS表单,其中包含 - 其中一个类型url.后者很重要,因为这会强制相应的输入成为有效的URL.
在某些条件下(例如,要关闭具有此类表单的模式对话框),我想以编程方式清除该表单.为此,我实现reset了通过设置基本清除相应表单模型的方法$scope.formData = {}.因此,它将表单模型设置为新的空白对象.
虽然该分配清除了呈现的HTML表单中的所有有效字段,但它不会清除无效字段,例如无效的URL.例如,如果用户将无效输入提供ht://t/p为URL,则不会从呈现的表单中删除该输入.
我认为这是因为模型没有反映任何无效的URL - 这样一个无效的URL只是不会"模仿"它到模型,因为它没有通过NgModelController#$parsers数组中的验证.因此,在模型中 - 根本没有URL.因此,重置表单模型{}实际上无法更改模型的URL,因为它尚未设置.
但是,如果方法reset显式设置了字段$scope.formData.url = "",则无效的URL将被正确清除(至少,渲染的表单将不再显示它).这是由模型中URL 的显式更改引起的.但是,现在,模型变量formData.url包含空字符串(嗯,不足为奇),而通过使用= {},所有字段都将是undefined相反的.
虽然将单个字段指定""为简单表单的解决方法,但对于包含许多字段的更复杂表单而言,它很快变得很麻烦.
因此,我如何能够以编程方式有效地重置表单 - 包括所有无效的输入字段?
我在http://plnkr.co/c2Yhzs创建了一个Plunker ,您可以在其中检查并运行一个显示上述效果的完整示例.
我正在使用Play的ActionBuilder创建各种保护我的控制器的操作.例如,我实现IsAuthenticated了以确保只有在用户登录时才能访问某些操作:
case class AuthRequest[A](user: String, request: Request[A]) extends WrappedRequest[A](request)
private[controllers] object IsAuthenticated extends ActionBuilder[AuthRequest] {
def invokeBlock[A](req: Request[A], block: (AuthRequest[A]) => Future[SimpleResult]) = {
req.session.get("user").map { user =>
block(new AuthRequest(user, req))
} getOrElse {
Future.successful(Results.Unauthorized("401 No user\n"))
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用IsAuthenticated我可以(1)将操作限制为已登录的用户,以及(b)访问登录的用户:
def auth = IsAuthenticated { implicit authRequest =>
val user = authRequest.user
Ok(user)
}
Run Code Online (Sandbox Code Playgroud)
此外,我使用ActionBuilder HasToken来确保在请求的标头中存在令牌时调用了一个动作(并且,我可以访问令牌值):
case class TokenRequest[A](token: String, request: Request[A]) extends WrappedRequest[A](request)
private[controllers] object HasToken extends ActionBuilder[TokenRequest] {
def invokeBlock[A](request: …Run Code Online (Sandbox Code Playgroud) authentication scala composition playframework playframework-2.0
我正在尝试让 Winston 日志库与我的 Sapper 应用程序一起使用。该 Sapper 应用程序使用 Rollup 作为模块捆绑器。为了实现我的应用程序,我基本上遵循了以下步骤:
\n\n启动使用 Rollup 的新 Sapper 项目:
\n\nnpx degit "sveltejs/sapper-template#rollup" my-app\nRun Code Online (Sandbox Code Playgroud)\n\n通过安装 Winstonnpm install winston并在文件中添加自定义记录器工厂src/_logging.js:
npx degit "sveltejs/sapper-template#rollup" my-app\nRun Code Online (Sandbox Code Playgroud)\n\n通过工厂获取记录器并在服务器路由中使用记录器src/routes/blog/_posts.js:
import { createLogger, transports, format } from \'winston\';\n\nexport function createLabeledLogger(label) {\n return createLogger({\n level: \'debug\',\n transports: [new transports.Console()],\n format: format.combine(\n format.label({ label: label, message: true }),\n format.splat(),\n format.padLevels(),\n format.simple(),\n )\n });\n\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这就像一个魅力:
\n\n\xe2\x9c\x94 service worker (16ms)\ndebug: [posts-server] …Run Code Online (Sandbox Code Playgroud) angularjs ×1
composition ×1
forms ×1
javascript ×1
rollupjs ×1
sapper ×1
scala ×1
validation ×1
winston ×1