小编Lou*_*ruz的帖子

Angular 2条件Validators.required?

我应该如何有条件地要求表格字段?我创建了一个自定义验证器,但是我传递给自定义验证器的条件变量是静态的并保持其初始值.我的自定义验证器应该如何获得更新的条件值?也许有一种方法可以用Validators.required而不是自定义验证器来做到这一点?

private foo: boolean = false;
private bar: boolean = true;

constructor(private _fb: FormBuilder) {
    function conditionalRequired(...conditions: boolean[]) {
      return (control: Control): { [s: string]: boolean } => {
        let required: boolean = true;
        for (var i = 0; i < conditions.length; i++) {
          if (conditions[i] === false) {
            required = false;
          }
        }
        if (required && !control.value) {
          return { required: true }
        }
      }
    }
    this.applyForm = _fb.group({
          'firstName': ['', Validators.compose([
            conditionalRequired(this.foo, !this.bar)
          ])],
          ...
    }); …
Run Code Online (Sandbox Code Playgroud)

typescript angular

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

Webpack + Babel:无法找到相对于目录的预设"es2015"

我有一个使用Webpack和Babel的React项目.当我在办公室计算机上创建它时,Webpack运行正常.当我将项目克隆到我的个人计算机上时,它出现以下错误:

ERROR in ./react_minesweeper.jsx
Module build failed: Error: Couldn't find preset "es2015" relative to directory "/Users/louisstephancruz/Desktop"
at /Users/louisstephancruz/Desktop/w6d5/minesweeper/node_modules/babel-core/lib/transformation/file/options/option-manager.js:298:19
at Array.map (native)
at OptionManager.resolvePresets (/Users/louisstephancruz/Desktop/w6d5/minesweeper/node_modules/babel-core/lib/transformation/file/options/option-manager.js:269:20)
Run Code Online (Sandbox Code Playgroud)

这是我的webpack.config.js:

module.exports = {
  entry: './react_minesweeper.jsx',
  output: {
    path: './',
    filename: 'bundle.js',
  },
  module: {
    loaders: [
      {
        test: [/\.jsx?$/, /\.js?$/],
        exclude: /(node_modules)/,
        loader: 'babel',
        query: {
          presets: ['es2015', 'react']
        }
      }
    ]
  },
  devtool: 'source-map',
  resolve: {
    extensions: ['', '.js', '.jsx' ]
  }
};
Run Code Online (Sandbox Code Playgroud)

这是我的package.json:

{
  "name": "minesweeper",
  "version": "1.0.0",
  "description": …
Run Code Online (Sandbox Code Playgroud)

reactjs webpack babeljs webpack-dev-server

17
推荐指数
3
解决办法
4万
查看次数

多态关联和嵌套属性:: error =>:blank

我想保存一个深层嵌套的表单.有三种不同的模型:应用程序,申请人和地址.地址是多态的,因为应用程序和申请人都可以拥有它们.这些是我发送的参数:

{"application"=>{
    "loan_type"=>"purchase",
    "loan_amount"=>2500000,
    "borrower_attributes"=>{
        "first_name"=>"Test",
        "middle_name"=>"Test",
        "last_name"=>"Test",
        "birthdate"=>"01/01/1970",
        "phone"=>"1231231234",
        "email"=>"test@me.com",
        "marital_status"=>"married",
        "address_attributes"=>{
            "street_address"=>"xxxx Mission Street",
            "city"=>"San Francisco",
            "state"=>"CA",
            "zip"=>xxxxx
        }
    }
}}
Run Code Online (Sandbox Code Playgroud)

在我的请求中发送此消息时,我收到以下响应:

<Address id: nil, street_address: "1045 Mission Street", city: "San Francisco", state: "CA", zip: 94103, addressable_type: "Applicant", addressable_id: nil, created_at: nil, updated_at: nil>
Run Code Online (Sandbox Code Playgroud)

并出现以下错误消息:

@messages={:"borrower.address.addressable"=>["must exist"]}, @details={"borrower.address.addressable"=>[{:error=>:blank}]}
Run Code Online (Sandbox Code Playgroud)

为什么我不能设置嵌套属性?我需要修复什么来使其工作?

这是我的相关文件:

application.rb中

class Application < ApplicationRecord
    before_save :assign_addresses!
    belongs_to :borrower, class_name: 'Applicant'
    belongs_to :coborrower, class_name: 'Applicant', optional: true
    has_one :address, as: :addressable

    accepts_nested_attributes_for :borrower
    accepts_nested_attributes_for :coborrower
    accepts_nested_attributes_for :address
end …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails ruby-on-rails-5

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

为什么在控制器中的渲染上调用current_user?

尝试访问sessions控制器的登录方法时出现以下错误:

JWT::DecodeError (Nil JSON web token):

lib/json_web_token.rb:11:in `decode'
app/helpers/sessions_helper.rb:15:in `current_user'
app/controllers/api/sessions_controller.rb:11:in `create'
Run Code Online (Sandbox Code Playgroud)

如果我render json: user在控制器响应中注释掉我的内容,那一切都很好,除了我需要与用户响应之外……为什么实际上是current_user通过的第11行调用的方法sessions_controller.rb。以下是相关代码:

lib / json_web_token.rb

require 'jwt'

class JsonWebToken
  def self.encode(payload, expiration = 24.hours.from_now)
    payload = payload.dup
    payload['exp'] = expiration.to_i
    JWT.encode(payload, Rails.application.secrets.json_web_token_secret)
  end

  def self.decode(token)
    JWT.decode(token, Rails.application.secrets.json_web_token_secret).first
  end
end
Run Code Online (Sandbox Code Playgroud)

sessions_helper.rb

require 'json_web_token'

module SessionsHelper
  def create_session(user)
    session[:user_id] = user.id
  end

  def current_user
    auth_token = request.headers["Authorization"]
    if auth_token
      auth_token = auth_token.split(" ").last
      begin
        decoded_token = JsonWebToken.decode auth_token
      rescue JWT::ExpiredSignature
        return …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails ruby-on-rails-5

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

如何获取Angular 2响应头

我正在使用Angular 2从我的Rails API服务器请求JSON.我的服务器设置为使用标头响应X-Total-Count: 10.我的服务器成功发送了这些标头:

服务器响应

但是当我尝试console.log(res.headers)http响应时,我只收到一个_headersMapwith Content-Type和Cache-Control:

在此输入图像描述

这是我的Rack :: Cors配置:

config.middleware.insert_before 0, "Rack::Cors" do
    allow do
        origins '*'
        resource '*', headers: :any, methods: [:get, :post, :options, :patch, :delete], expose: ['X-Total-Count']
    end
end
Run Code Online (Sandbox Code Playgroud)

我在控制器中设置标头的方式:

  def index
    ...
    @posts = ...

    response.headers['X-Total-Count'] = '10'
    response.headers['Access-Control-Allow-Headers'] = 'X-Total-Count'

    render json: @posts
  end
Run Code Online (Sandbox Code Playgroud)

我怎样才能确保X-Total-Count出现在_headersMap?或者,我如何访问X-Total-Count价值响应?

ruby-on-rails angular

3
推荐指数
1
解决办法
766
查看次数

Angular - 如何使资源全球化?

我目前正在将音轨资源成功加载到我网站的"作品"页面.以下是我的"Works"控制器实现此目的的方法:

'use strict';

angular.module('appName')
  .controller('WorksCtrl', function ($scope, $http, socket) {
    $scope.works = [];

    $http.get('/api/works').success(function(works) {
      $scope.works = works;
      socket.syncUpdates('work', $scope.works);
    });
  });
Run Code Online (Sandbox Code Playgroud)

但是,现在我需要在整个站点上全局访问我的曲目.我可以通过我的中心app.js中的工厂实现这一点,如果是这样,怎么做?

javascript angularjs angularjs-scope

2
推荐指数
1
解决办法
54
查看次数