NativeScript / Angular - TypeError:无法读取属性'符号'未定义的

时间:2017-04-21 19:12:52

标签: angular nativescript angular2-formbuilder nativescript-angular

我有一个页面组件,其格式为FormBuilder

public adForm: FormGroup = this.fb.group({
  questions: this.fb.array([])
});

我将questions传递给<questions>组件:

<questions [questions]="adForm.get('questions')"></questions>

其中有一个@Input() questions: FormArray;并使用此模板:

<StackLayout orientation="vertical">
  <!-- If I comment out listview then it doesn't throw the error -->
  <ListView [items]="questions">
    <ng-template let-question="item">
      <Label [text]="question.model"></Label>
    </ng-template>
  </ListView>
  <Button class="btn btn-md btn-primary" text="Add question" (tap)="addQuestion()"></Button>
</StackLayout>

我面临的问题是ListView位会引发此错误:

TypeError: Cannot read property 'Symbol' of undefined

如果我对该部分发表评论,那么它就不会抛出错误。

我知道它与questions表单数组有关,但我还没有弄清楚是什么。它被定义为不应该是与获取undefined而不是空数组的事情有关的问题。

请注意,此错误直接在组件init上引发。我已在questions中记录了ngOnInit,但未定义。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

我完全忘记了如果我传递一个表单数组,我实际上并没有获得原始值,即数组。所以在ListView中我要么必须questions.value或{{1}为了循环它们。

我希望将来可以帮助别人。

答案 1 :(得分:1)

只是为了在样板上添加一些内容,我遇到了这个问题以及更简单的列表,尽管我使用的组件是telerik的RadListView,它仍然基于nativescript的核心ListView

相关HTML是:

n = 1

s

0     1
1     2
2     3
3     5
4     7
5    10
6    13
7    16
8    20
dtype: int64

m = ~s.diff().fillna(0).le(n)   
v = s.groupby(m.cumsum()).apply(lambda x: x.tolist()).tolist()

v
[[1, 2, 3], [5], [7], [10], [13], [16], [20]]

我也遇到了这个错误,但是从控制台来看,检测问题并不容易:

   <GridLayout tkExampleTitle tkToggleNavButton>
        <RadListView class="list-group" ng-if="!isLoading" [items]="getAsyncList">
            <ng-template tkListItemTemplate let-item="item">
                <StackLayout class="list-group-item" orientation="vertical">
                    <Label class="list-group-item-heading" [text]="item.name"></Label>
                </StackLayout>
            </ng-template>
        </RadListView>
    </GridLayout>

所以,在经历了一个疯狂的家伙约30分钟之后,我发现这个问题比我期待的要容易得多。

JS: ERROR TypeError: Cannot read property 'Symbol' of undefined JS: ERROR CONTEXT [object Object] 参数应该是getter的结果,但我确实在我的组件中定义了一个具有相同名称的函数:

items

所以它可能将函数引用到列表而不是getter,因此我不得不将其更改为:

public getAsyncList() {
  return this.ListViewCollection;
}

(请注意public get getAsyncList() { return this.ListViewCollection; } )。

有点难以追查问题但嘿,无论如何这是我的错:P。