Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Nativescript将LIstPicker与JS对象一起使用_Javascript_Nativescript_Angular2 Nativescript - Fatal编程技术网

Javascript Nativescript将LIstPicker与JS对象一起使用

Javascript Nativescript将LIstPicker与JS对象一起使用,javascript,nativescript,angular2-nativescript,Javascript,Nativescript,Angular2 Nativescript,我正在尝试将ListPicker与对象数组一起使用,我的列表呈现为所有元素的标签显示[object object] 我想指定哪个属性用作listpicker的“标签” 不幸的是,Nativescript ListPicker只接受字符串数组,我不能使用我的对象数组,因为标签将调用toString() 我找到了一个基于以下内容的替代解决方案: buy my app使用page router outlet,不使用element,因此我无法使用上述建议的方法。在这种情况下,是否有任何可能的方法将Lis

我正在尝试将ListPicker与对象数组一起使用,我的列表呈现为所有元素的标签显示[object object]

我想指定哪个属性用作listpicker的“标签”

不幸的是,Nativescript ListPicker只接受字符串数组,我不能使用我的对象数组,因为标签将调用toString()

我找到了一个基于以下内容的替代解决方案:


buy my app使用page router outlet,不使用element,因此我无法使用上述建议的方法。在这种情况下,是否有任何可能的方法将ListPicker与对象数组一起使用,或者有任何不依赖于页面元素加载事件的解决方法?

您根本不必使用任何加载的事件。只需重写
toString
方法并将项目传递给ListPicker:

  public countries: any[] = [
    {
      value: 0,
      name: 'Sweden',
      toString: () => {
        return 'Sweden';
      }
    },
    {
      value: 1,
      name: 'Denmark',
      toString: () => {
        return 'Denmark';
      }
    },
    {
      value: 2,
      name: 'Norway',
      toString: () => {
        return 'Norway';
      }
    },
    {
      value: 3,
      name: 'Finland',
      toString: () => {
        return 'Finland';
      }
    },
    {
      value: 4,
      name: 'Iceland',
      toString: () => {
        return 'Iceland';
      }
    },
  ];
将它们传递给选择器:

<ListPicker [items]="countries"></ListPicker>

有一个未记录的拉取请求,使得绑定到对象变得更容易:

将新属性添加到
列表视图
组件(
textField
valueField
-应与JSON对象数组一起使用):

textField
-告诉listview应该使用哪个属性来显示每个项目

valueField
-告诉listview应该使用哪个属性来更新selectedValue

selectedValue
-是将包含
selectedValue
的属性,如果指定了
valueField
,则它将包含该属性中的值,否则它将包含整个选定项

示例(角度):

<ListPicker [items]="printers" textField="name" valueField="id"></ListPicker>

假设我有一个按钮,当按下该按钮时,会动态更改所有countries对象上的toString方法。在我滚动ListPicker之前,ListPicker不会拾取已更改的toString方法。要使changedetection与对象一起工作,您需要做些特殊的事情吗?@apricity还可以使用扩展运算符
this.myData=[…myData]
更新引用,或者您可能需要使用
changeDetectorRef.markForCheck()
。没有一个例子就很难说。markForCheck()起作用了:我以前很困惑,并且使用了detectChanges()。这很有帮助:哇“三个小时前回答”,问题来自2017年的“及时”话题:)正好在我需要的时候找到了这个。谢谢你@DarkNeuron!幸运的东西:-)有什么变化吗?当我将它绑定到变量时,它会将值设置为索引的值
const printers = [{name: "Printer 1", id: 1}, {name: "Printer 2", id: 2}];