用于检测和替换未定义对象属性的全局函数/服务| Angular 2 -TS

时间:2017-01-30 07:50:50

标签: javascript angular typescript undefined

我搜索了

问题的解决方案
  

core.umd.js:3523 ORIGINAL EXCEPTION: Cannot read property 'fullName' of undefined

Exception来自Template获取特定属性:

{{project.collaborators["0"]["fullName"]}}

我也发现了一些有用的answer

但我正在寻找一种定义全局服务的方法,该服务将检查每个对象并用缺省值替换missing / empty属性,即-

而不是检查每个模板的每个属性,而不会使代码减少错误。

// undefined-obj.service.ts
import { Injectable } from '@angular/core';

@Injectable()
export class UndefinedObjectsGlobalService {
private charecterToReplace: string = '-'; // set defualt value

replaceDefaultCharecter(object: any, charecterToReplace: string): any {
        this.charecterToReplace = charecterToReplace;
        // create instance vars to store keys and final output
        let keyArr: any[] = Object.keys(object),
        var dataArr: any[];

        // loop through the object,
        // pushing values to the return array
        keyArr.forEach((key: any) => {

                // if key is null at any iteration then replace is with given text
                if (key == null){
                        dataArr.push(object[key] = this.charecterToReplace); 
                        // else push 
                }else{
                        dataArr.push(object[key]); 
                }

        });

        // return the resulting array
        // need to convert is back to object any idea ?
        return dataArr;
        }
}

因为我是棱角分明的新人所以班级undefinedObjectsGlobalService可能是错误的

请帮忙。

1 个答案:

答案 0 :(得分:2)

您似乎试图访问不存在的对象的属性。

Angular已经为elvis操作员提供了处理此类事情的方法。

 listViewTop.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
 listViewBottom.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
 listViewTop.setSelector(android.R.color.holo_blue_light); // replace with your color
 listViewBottom.setSelector(android.R.color.holo_blue_light);

您可以看到示例here