如何从打字稿中的函数调用函数?

时间:2018-01-25 15:06:02

标签: angular typescript

我有一个名为public static string RemoveEmptyUrlParameters(string input) { var results = HttpUtility.ParseQueryString(input); Dictionary<string, string> nonEmpty = new Dictionary<string, string>(); foreach(var k in results.AllKeys) { if(!string.IsNullOrWhiteSpace(results[k])) { nonEmpty.Add(k, results[k]); } } return string.Join("&", nonEmpty.Select(kvp => $"{kvp.Key}={kvp.Value}")); } 的函数,它返回一个用于CSS的字符串。

我试图从另一个函数调用它,但不是返回颜色,而是返回正在插入我的CSS的文字函数体。

调用函数

getColor(params)

我的问题是函数将函数体作为文本返回。

coldef = (processedJson) => { this.customColumns.push( { headerName: "Test Set Name", field: "field1", width: 310, cellStyle: { 'font-size': '12px;' } }); this.customColumns.push( { headerName: "Test Case Name", field: "field2", width: 310, cellStyle: { 'font-size': '12px;' } }); for (var i = 0; i < this.columns.length; i++) { var item = this.columns[i]; this.customColumns.push( { headerName: this.columns[i], field: this.columns[i], width: 110, cellStyle: { 'font-size': '12px;', 'background-color': this.getColor } }); } } 接受一个名为this.getColor的参数,但根据我的理解,此值由angular插入并包含我的JSON对象。

如何让params只返回我需要的字符串?

3 个答案:

答案 0 :(得分:1)

你正在使用它:

'background-color': this.getColor

当你的功能等待参数时(根据你)。这对你来说不是很奇怪吗?

要调用函数,需要像这样编写括号:

'background-color': this.getColor()

在你的情况下,你也应该给它params,这意味着把一些东西放到括号中。

答案 1 :(得分:1)

You need to provide params to the getColor function and then actually call it as others suggested. There are two ways how you can get params in the call:

  • Pass it as an argument to colddef function:
coldef = (processedJson, params) => {
  this.customColumns.push(
    {
        headerName: "Test Set Name", field: "field1", width: 310,
        cellStyle: { 'font-size': '12px;' }
    });

  this.customColumns.push(
    {
        headerName: "Test Case Name", field: "field2", width: 310,
        cellStyle: { 'font-size': '12px;' }
    });

  for (var i = 0; i < this.columns.length; i++) {
    var item = this.columns[i];
    this.customColumns.push(
        {
            headerName: this.columns[i], field: this.columns[i], width: 110,
            cellStyle: { 'font-size': '12px;', 'background-color': this.getColor(params) }
        });
  }
}
  • Add it to the param object/scope (this):
this.params = params;

coldef = (processedJson) => {
  this.customColumns.push(
    {
        headerName: "Test Set Name", field: "field1", width: 310,
        cellStyle: { 'font-size': '12px;' }
    });

  this.customColumns.push(
    {
        headerName: "Test Case Name", field: "field2", width: 310,
        cellStyle: { 'font-size': '12px;' }
    });

  for (var i = 0; i < this.columns.length; i++) {
    var item = this.columns[i];
    this.customColumns.push(
        {
            headerName: this.columns[i], field: this.columns[i], width: 110,
            cellStyle: { 'font-size': '12px;', 'background-color': this.getColor(this.params) }
        });
  }
}

答案 2 :(得分:0)

我的问题是,角度中的params仅在闭包内的范围内。我需要将其传递给getColor

 for (var i = 0; i < this.columns.length; i++) {
     var item = this.columns[i];
     this.customColumns.push(
         {   headerName: this.columns[i], field: this.columns[i], width: 110,
             cellStyle: (params) => {
                return { 
                   'font-size': '12px;', 'background-color': this.getColor(params)
                }; 
             }
         }
     );
 }