我有这样的http观察,在我的UserService:
logout() {
return this.http.delete(this.baseUrl + url, {
headers: this.headers()
}).map((res: IResponse) => {
var json = res.json();
json.headers = res.headers;
return json;
}).subscribe((response) => {
//DO SOMETHING, THEN ----
return res;
});
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个observable,并创建了一个subscription(response),它是返回的成功值.
现在,在我的组件中,我想打电话UserService.logout(),然后导航到一个新的路线:
logout() {
this.userService.logout();
this.router.navigate(['LandingPage']);
}
Run Code Online (Sandbox Code Playgroud)
显然,这可能是异步发生的,我可能会在我退出之前导航.
使用promises,我可以做这样的事情:
this.userService.logout().then(() => {
this.router.navigate(['LandingPage']);
});
我怎么能用observable做同样的事情?在我的UserService课堂上,我想创建一个observable,订阅它,在成功或出错时做一些事情,然后从我的视图组件导航.
我希望能够通过一个方法传递包含驼峰键的任何 javascript 对象,并返回一个带有 underscore_case 键的对象,映射到相同的值。
所以,我有这个:
var camelCased = {firstName: 'Jon', lastName: 'Smith'}
Run Code Online (Sandbox Code Playgroud)
我想要一种方法来输出这个:
{first_name: 'Jon', last_name: 'Jon'}
Run Code Online (Sandbox Code Playgroud)
编写一个方法,该方法接受具有任意数量键/值对的任何对象并输出该对象的 underscore_cased 版本的最快方法是什么?
我有这样的事情:
module Api
module V1
class Order < ActiveRecord::Base
has_many :order_lines
accepts_nested_attributes_for :order_lines
end
end
module Api
module V1
class OrderLine < ActiveRecord::Base
belongs_to :order
end
end
Run Code Online (Sandbox Code Playgroud)
在我的订单控制器中,我允许order_lines_attributes参数:
params.permit(:name, :order_lines_attributes => [
:quantity, :price, :notes, :priority, :product_id, :option_id
])
Run Code Online (Sandbox Code Playgroud)
然后,我正在调用相应的路线,这将创建一个订单并且所有嵌套order_lines.该方法成功创建了一个订单,但是一些rails魔术也试图创建嵌套的order_lines.我收到此错误:
Uninitialized Constant OrderLine.
我需要我的accepts_nested_attributes_for电话才能意识到这OrderLine是命名空间Api::V1::OrderLine.相反,幕后的rails正在寻找OrderLine没有名称空间的东西.我该如何解决这个问题?
使用Typescript构建Angular 2应用程序,我试图导入流行的d3库.
我已使用安装了类型定义TSD,并且我tsd.d.ts正确引用了该文件:
/// <reference path="../../../tools/typings/tsd/tsd.d.ts" />
现在,我想要import我的d3node_module.它通过NPM以下方式安装:
/// <reference path="../../../tools/typings/tsd/tsd.d.ts" />
import * as d3 from 'd3/d3';
Run Code Online (Sandbox Code Playgroud)
这有效,但我的类型定义没有任何好处.我的IDE没有提供任何预先输入信息或语法高亮显示.如果我改成它:
/// <reference path="../../../tools/typings/tsd/tsd.d.ts" />
import * as d3 from 'd3/d3';
Run Code Online (Sandbox Code Playgroud)
我现在得到了我期待的所有语法高亮/预先输入定义.但是,我的应用程序正在寻找一个node_modules/d3.js不存在的文件,所以这显然不起作用.
当我将import语句更改为var声明时,我的应用程序正确编译并获得所有适当的打字稿定义:
/// <reference path="../../../tools/typings/tsd/tsd.d.ts" />
declare var d3 = require('d3/d3');
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是什么是正确的方法?importvs declare var有什么区别,有没有办法在使用时获取类型定义,import如果它们不包含在npm模块本身中?
我注意到import {Component} from 'angular2/core';工作正常,但类型定义包含在我导入的javascript文件所在的目录中.