小编Opt*_*tte的帖子

Angular:生命周期钩子是Component可用的输入数据

我有一个组件接收一个image对象数组作为Input数据.

export class ImageGalleryComponent {
  @Input() images: Image[];
  selectedImage: Image;
}
Run Code Online (Sandbox Code Playgroud)

我想在组件加载时将selectedImage值设置为images数组的第一个对象.我试图在OnInit生命周期钩子中这样做:

export class ImageGalleryComponent implements OnInit {
  @Input() images: Image[];
  selectedImage: Image;
  ngOnInit() {
    this.selectedImage = this.images[0];
  }
}
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误Cannot read property '0' of undefined,这意味着images在这个阶段没有设置值.我也尝试了OnChanges钩子,但我卡住了,因为我无法获得有关如何观察阵列变化的信息.我怎样才能达到预期的效果?

父组件如下所示:

@Component({
  selector: 'profile-detail',
  templateUrl: '...',
  styleUrls: [...],
  directives: [ImageGalleryComponent]
})

export class ProfileDetailComponent implements OnInit {
  profile: Profile;
  errorMessage: string;
  images: Image[];
  constructor(private profileService: ProfileService, private   routeParams: …
Run Code Online (Sandbox Code Playgroud)

javascript typescript angular

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

为什么这个聚合物元素的属性解析为未定义?

我试图动态地为iron-ajax模板分配属性,但它解析为未定义.

<dom-module id="products-service">
  <style>
    :host {
      display: none;
    }
  </style>

  <template>
    <iron-ajax id="productsajax"
      auto
      url="http://localhost:3003/api/taxons/products"
      params='{"token":"my-token"}'
      method='GET'
      on-response='productsLoaded'
      handleAs='json'>
    </iron-ajax>
  </template>
</dom-module>

<script>
(function() {
    Polymer({
        is: 'products-service',

        properties: {
            categoryid: {
                type: String,
                notify: true,
                reflectToAttribute: true
            }
        },

        //here I am trying to add and `id` to the `iron-ajax` `params` attribute.
        ready: function() {
            this.$.productsajax.params.id = this.categoryid;
       }
    });
})();
</script>
Run Code Online (Sandbox Code Playgroud)

生成的url如下所示:

`http://localhost:3003/api/taxons/products?token=my-token&id=undefined`
Run Code Online (Sandbox Code Playgroud)

dom-modulecategoryid属性不是undefined我可以看到反映在属性正确的属性值,这意味着它是与如何我把它分配给属性.我也尝试了这个createdattached回调,但仍然无法正常工作.

编辑:categoryid …

javascript web-component polymer polymer-1.0

8
推荐指数
1
解决办法
5844
查看次数

角度绑定到视图上的函数会导致对数据服务的无限调用

我正在尝试将src图像的属性绑定到如下所示的ngFor指令中:

<div *ngFor="imageId of imageIds">
  <img [attr.src]="imageSrc(imageId)" alt="{{imageId}}">
</div>
Run Code Online (Sandbox Code Playgroud)

imageSrc组件内部的方法如下所示:

imageSrc(imageId: string){
  var hostUrl = "http://192.168.0.101:3000/";
  var imageUrl = hostUrl+"images/"+imageId;
  var imgSrc = "";

  this._imageService.getImage(imageId)
  .subscribe(image => {
    imgSrc = hostUrl + image.url
   });
  return imgSrc;
}
Run Code Online (Sandbox Code Playgroud)

中的getImage函数Injectable ImageService如下所示:

getImage(id: string) {
  var _imageUrl = "http://192.168.0.101:3000/images/"+id;
  return this.http.get(_imageUrl)
  .map(res => <Image>res.json().data)
  .catch(this.handleError)
}
Run Code Online (Sandbox Code Playgroud)

问题是,只有两个imageIds*ngFor指令呈现两个列表项为预期(但没有图像显示),但在调用数据服务不会停止,它得到了什么似乎是一个无限循环结束,两个图像直到应用程序崩溃。我做错了什么?

javascript angular2-directives angular2-services angular

6
推荐指数
1
解决办法
4378
查看次数

我怎样才能浏览这个查询字符串

我将此请求发送到服务:

get_store_data = Typhoeus::Request.new("http://localhost:3000/api/v1/store?service=#{(proxy_ticket.service)}&ticket=#{proxy_ticket.ticket}")
Run Code Online (Sandbox Code Playgroud)

proxy_ticket.service解析为此字符串"http://localhost:3000/api/v1/store".发送请求时,此字符串将转义为:

service=http%3A%2F%2Flocalhost%3A3000%2Fapi%2Fv1%2Fstore
Run Code Online (Sandbox Code Playgroud)

问题是另一端的服务需要服务参数,"http://localhost:3000/api/v1/store"如何防止此查询字符串被转义?

ruby url ruby-on-rails query-parameters

5
推荐指数
2
解决办法
3620
查看次数

Elasticsearch rails/Elasticsearch模型搜索模型关联

我有一个名为的模型Movie,如下所示:

class Movie < ActiveRecord::Base
  include Elasticsearch::Model
  include Elasticsearch::Model::Callbacks

  has_many :actors, after_add: [ lambda {|a,c| a.__elasticsearch__.index_document}],
                    after_remove: [ lambda {|a,c| a.__elasticsearch__.index_document}]

  settings index: {number_of_shards: 1} do
    mappings dynamic: 'false' do
      indexes :title, analyzer: 'snowball', boost: 100
      indexes :actors
    end
  end

   def as_indexed_json(options={})
    self.as_json(
      include: {
          actors: { only: :name}
      }
    )
  end
end
Run Code Online (Sandbox Code Playgroud)

当我这样做时Movie.first.as_indexed_json,我得到:

{"id"=>6, "title"=>"Back to the Future ", 
"created_at"=>Wed, 03 Dec 2014 22:21:24 UTC +00:00, 
"updated_at"=>Fri, 12 Dec 2014 23:40:03 UTC +00:00, 
"actors"=>[{"name"=>"Michael J …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails elasticsearch elasticsearch-model

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

当加载铁-ajax时,显示聚合物不确定纸张的进展

我正在尝试在iron-ajax请求正在进行但未成功时显示文件进度.下面是一个自定义的元素的代码get-products-service,其承载iron-ajax请求和products-list它承载paper-progress.

这是整体products-list dom-module:

<dom-module id="product-list">
  <style>
    :host {
      display: block;
      width: 100%;
      text-align: center;
    }
    product-card {
      margin-left: 10px;
      margin-bottom: 30px;
    }
</style>
<template>
  <template is="dom-if" if="{{loading}}">
    <paper-progress value="10" indeterminate="true"  style="width:100%;"></paper-progress>
  </template>
  <paper-button id="previous" on-tap='previousPage'>Previous</paper-button>
  <paper-button id="next" on-tap='nextPage'>Next</paper-button>

  <get-products-service products="{{products}}" id="productservice"   page="{{page}}" loading="{{loading}}"></get-products-service>
 <div>
    <template is="dom-repeat" items="{{products}}">
     <product-card on-cart-tap="handleCart" product="{{item}}">
       <img width="100" height="100">
       <h3>{{item.name}}</h3>
       <h4>{{item.display_price}}</h4>
     </product-card>
    </template>
  </div>
</template>
</dom-module>
<script>
  (function() {
  Polymer({
  is: 'product-list',

  properties: { …
Run Code Online (Sandbox Code Playgroud)

javascript ajax polymer polymer-1.0

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

聚合物确定dom重复项目中的最后一个项目

我正在尝试从字符串数组创建面包屑。我有一个名为的数组属性taxonomy,它看起来像["categories", "clothing", "men", "suits"]dom-repeat像这样使用:

<template is="dom-repeat" items="{{taxonomy}}" id="breadcrumbs">
  <span>{{item}}</span><span hidden$="[[computeSpanHidden]]"> > </span>
</template>
Run Code Online (Sandbox Code Playgroud)

结果视图如下所示:

类别>服装>男士>西装>

我想要的是删除最后一个>,以获得类似这样的内容:

类别>服装>男士>西装

我尝试通过绑定到要隐藏的范围的hidden属性来执行此操作,但是我被卡住了。不完整的computeSpanHidden函数如下所示:

computeSpanHidden: function(){
  if(this.taxonomy.slice(-1)[0] == /**the value i want to know how to get **/)
    { return true; } 
      else 
        { return false; }
}
Run Code Online (Sandbox Code Playgroud)

javascript data-binding polymer polymer-1.0

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

Angular 2:OnInit期间设置的属性在模板上未定义

我有这个组件:

export class CategoryDetailComponent implements OnInit{
  category: Category;
  categoryProducts: Product[];
  errorMessage: string;
  constructor(private _categoryService: CategoryService, private _productService: ProductService, private _routeParams: RouteParams ) {}

  ngOnInit() {
    this.getCategoryAndProducts();
  }
  getCategoryAndProducts() {
    let categoryName = this._routeParams.get('name');
    let categoryId = this.routeParams.get('id');
    var params = new URLSearchParams();
    params.set('category', categoryName);

    Observable.forkJoin(
      this._categoryService.getCategory(categoryId),
      this._productService.searchProducts(params)
    ).subscribe(
      data => {
      //this displays the expected category's name.
      console.log("category's name: "+ data[0].attributes.name)
      this.category = data[0];
      this.categoryProducts = data[1];
      }, error => this.errorMessage = <any>error
    )
  }
}
Run Code Online (Sandbox Code Playgroud)

在组件的模板中,我有:

<h1>{{category.attributes.name}}</h1>
Run Code Online (Sandbox Code Playgroud)

当我导航到这个组件时,我收到一个错误:

TypeError: …
Run Code Online (Sandbox Code Playgroud)

javascript typescript angular2-template angular

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

在SpreeCommerce API中使用taxon_id搜索产品

我正在尝试使用SpreeCommerce API搜索产品taxon_ids作为过滤器.搜索api使用ransack gem 谓词进行搜索.我试过了:

/api/products?q[taxon_ids_cont]=x
Run Code Online (Sandbox Code Playgroud)

(其中x是分类单元的id).我也尝试过:

/api/products?q[taxon_ids_in]=x
Run Code Online (Sandbox Code Playgroud)

并且都返回所有产品的json而不进行过滤.我应该在products端点上使用哪些参数来获取过滤的产品,taxon_ids或者我可以如何解决此问题?

api ruby-on-rails spree

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

如何从FileReader事件中设置Component的属性值

我有这个组件:

export class FileFormComponent {
  _base64: string;

 handleFile($event){
   var input = $event.target;
   var reader = new FileReader();
   reader.onloadend = function() {
     this._base64 = reader.result
   }
   reader.readAsDataURL(input.files[0]);
   console.log(this._base64);
 }
}
Run Code Online (Sandbox Code Playgroud)

问题是console.log(this._base64)日志undefined.看来this里面的onloadend事件并不是指组件的上下文.如何_base64FileReader onloadend事件内部设置属性的值.

javascript typescript angular

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

带有数据类型“脚本”的 ajax 请求的额外未知参数

我正在尝试将表单输入中的参数添加到link_to.js.erb. (为清楚起见,我不是要提交表单。)表单如下所示:

form_tag players_path, method: 'get', id: 'my_form' do%>
  <%= number_field_tag :min_age, params[:min_age], id: 'min_age' %>
  <%= number_field_tag :max_age, params[:max_age], id: 'max_age' %>
  <%= submit_tag  'go'%>
<% end %>
Run Code Online (Sandbox Code Playgroud)

link_to如下所示:

<%= link_to '70 lbs & Under', players_path(:min_weight => 0, :max_weight => 70), id: 'my_link',  remote: true %>
Run Code Online (Sandbox Code Playgroud)

我想要做的是将 的值添加#my_form#my_link. 为此,我正在使用 jQuery:

$(document).ready(function(){
   $('#my_link').click (function(){
    var parameterValues = $('#my_form').serialize();
    $.ajax({
        type:'GET',
        url: $(this).attr('href'),
        data: parameterValues,
        dataType:"script"
    });
    return false;

});
}); …
Run Code Online (Sandbox Code Playgroud)

javascript ajax jquery ruby-on-rails

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

我在哪里将按钮的侦听器方法放在dom-bind模板上

我使用的有一些聚合物入门套件paper-icon-buttons上的paper-toolbar默认.

<body unresolved class="fullbleed layout vertical">
  <template is="dom-bind" id="app">
  <paper-drawer-panel id="paperDrawerPanel" forceNarrow>
   <paper-header-panel main mode="flex">
    <!-- Main Toolbar -->
    <paper-toolbar id="mainToolbar">

      <!-- Toolbar icons -->
        <paper-icon-button icon="search"></paper-icon-button>
        <paper-icon-button icon="refresh" on-tap='refreshTapped'></paper-icon-button>

      </paper-toolbar>

    </paper-header-panel>
  </paper-drawer-panel>
</template>

<script src="scripts/app.js"></script>
Run Code Online (Sandbox Code Playgroud)

如何on-tap在刷新按钮上添加监听器?我试图添加scripts/app.js如下所示的侦听器方法,但仍无法找到该方法.

function refreshTapped(){ 
  document.querySelector('#myDialog').toggle();
}
Run Code Online (Sandbox Code Playgroud)

当我点击按钮时,我在浏览器控制台上看到了这个:

`[dom-bind::_createEventHandler]: listener method `refreshTapped` not defined`
Run Code Online (Sandbox Code Playgroud)

javascript polymer polymer-1.0 polymer-starter-kit

0
推荐指数
1
解决办法
2433
查看次数