如何使Nativescript listview工作

时间:2017-10-23 22:17:43

标签: angular typescript nativescript

我正在使用nativescript和angular 2进行应用程序。我正在尝试使用nativescript listview组件,但我无法使其正常工作,我在尝试应用程序时得到的内容始终是“[object object]”。

这是我的观看代码:

                               <grid-layout columns="*" rows="*">
                               <ListView [items]="itemsd" class="listview" #LISTV>
                                   <ListView.itemTemplate>
                                        <grid-layout columns="50, *" rows="*" class="item item-avatar">
                                            <image src="{{ '~/images/' + img }}" col="0" ></image>
                                            <stack-layout col="1">
                                                <label text="{{ artist }}" class="h2" col="1"></label>
                                                <label text="{{ title }}" class="p" col="1"></label>
                                            </stack-layout>
                                        </grid-layout>
                                   </ListView.itemTemplate>
                               </ListView>
                           </grid-layout>

这是我的ts代码:

    ngOnInit(): void {
    this.fakeListItems = [{
        "img":"ANDY.jpg",
        "artist":"ANDY",
        "title":"A User"
    }]
    this.itemsd = new ObservableArray(this.fakeListItems);
}

我尝试了所有方法来使这个listview工作,但文档并不那么好,并且有许多版本形成telerik的不同网站。反正有没有让这项工作?如何 ?

谢谢。

2 个答案:

答案 0 :(得分:1)

语法混合可能是罪魁祸首。尝试更改[items] =&#34; itemsd&#34; to items =&#34; {{itemsd}}&#34;。

来自我的演示应用程序的角度2.3 NS代码,工作得很好:

  <ListView items="{{ peripherals }}" itemTap="{{ onPeripheralTap }}" separatorColor="#ffffff">
      <ListView.itemTemplate>
          <StackLayout orientation="horizontal">
              <StackLayout cssClass="padded-label-stack" width="60%">
                <Label horizontalAlignment="left" text="{{ advertisement }}"/>
                <Label horizontalAlignment="left" text="{{ number1 + ' coins for €' + number2 }}"/>
              </StackLayout>
              <StackLayout cssClass="padded-label-stack" width="40%">
                <Label horizontalAlignment="right" text="{{ 'Time: ' + timestamp }}"/>
                <Label horizontalAlignment="right" text="{{ distance + 'm away' }}"/>
              </StackLayout>
          </StackLayout>
      </ListView.itemTemplate>
  </ListView>

你的ts代码似乎与我的显着不同,除了你不积极使你的对象可观察。你可以很好地初始化你的数组。

observablePeripheralArray = new observableArray.ObservableArray();
peripheralArray = new Array();
peripherals = this.observablePeripheralArray;

var that = this;
var onDiscovered = function (result) {
  let extended = new ExtendedPeripheral(result);
  var obsp = new Observable(extended);
  ...
  that.observablePeripheralArray.splice(i, 0, obsp);

一个旁注:考虑使用nativescript插件获取Visual Studio代码,这样您就可以运行调试器来查看您的项目究竟是什么。或者尝试JSON.stringify(this.itemsd [0])以查看您的结构是否正确。如果您的对象始终包含相同的字段,请为它们创建一个类。

答案 1 :(得分:1)

我认为您只是误解了语法,{{ }}应该是[ ]

<grid-layout columns="*" rows="*">
     <ListView [items]="itemsd" class="listview" #LISTV>
          <ListView.itemTemplate>
                <grid-layout columns="50, *" rows="*" class="item item-avatar">
                        <image [src]="'~/images/'+img" col="0" ></image>
                              <stack-layout col="1">
                                  <label [text]="artist" class="h2" col="1"></label>
                                  <label [text]="title" class="p" col="1"></label>
                               </stack-layout>
                 </grid-layout>
            </ListView.itemTemplate>
       </ListView>
</grid-layout>