如何从ng-repeat中的<td>元素调用javascript函数

时间:2019-06-24 12:25:02

标签: javascript angularjs

在ng-repeat td内部调用角度函数。从td中获取值并从函数值中替换它。以下代码不起作用。相同的getCSTDateTime而不是date出现在表中。我想将系统日期转换为cst date。 例如:         

<td id="txt">{{getCSTDateTime(document.lastUpdateDateTime)}}</td>

</tr>

我已经按照流程在堆栈中进行搜索,并按照上述步骤进行操作。并将此功能也添加到$ Scope中。但是,此函数仍未调用并返回我的值。

$scope.getCSTDateTime = getCSTDateTime;



 $scope.getCSTDateTime= function(lastUpdateDateTime) {
      var currentDate =lastUpdateDateTime;
      var cstDate;
      var hour;
      var minutes;
      var seconds;
      var jan = new Date(currentDate.getFullYear(), 0, 1);
      var jul = new Date(currentDate.getFullYear(), 6, 1);

      var  timezoneOffset =Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset());

      // Check if daylight savings
      if (currentDate.getTimezoneOffset() < timezoneOffset) {
          // Adjust date by 5 hours
          cstDate = new Date(currentDate.getTime()-((1 * 60 * 60 * 1000) * 5));
        }
      else {
          // Adjust date by 6 hours
             cstDate = new Date(currentDate.getTime() - ((1 * 60 * 60 * 1000) * 6));
      }           
      hour = cstDate.getHours();
      minutes = cstDate.getMinutes();
      seconds = cstDate.getSeconds();
      m = checkTime(minutes);
      s = checkTime(seconds);
      //date:"MM/dd/yyyy h:mma" :'CDT'
      var month = cstDate.getUTCMonth() + 1; //months from 1-12
      var day = cstDate.getUTCDate();
      var year = cstDate.getUTCFullYear();
      document.getElementById('txt').innerHTML =      month + "/" + day + "/" +year +" "+h+":"+m;
};



    //var Date.prototype.stdTimezoneOffset = $( function () {

// var jan = new Date(this.getFullYear(), 0, 1);
       // var jul = new Date(this.getFullYear(), 6, 1);
      //  return Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset());
    //});

    //Date.prototype.isDstObserved = function () {
       // return this.getTimezoneOffset() < this.stdTimezoneOffset();
    //}


var checkTime=$(function checkTime(i) {
      if (i < 10) {i = "0" + i};  // add zero in front of numbers < 10
      return i;
    });

我希望调用在控制器内部定义的函数

2 个答案:

答案 0 :(得分:0)

获得相同日期时间的原因是您没有使用从函数调用传递的lastUpdateDateTime。

 {{ getCSTDateTime(document.lastUpdateDateTime)}}

$scope.getCSTDateTime= function() {....

您需要对传递给函数的参数进行操作

$scope.getCSTDateTime= function(lastUpdateDateTime) {.... get date calculations....

然后将您在该日期/时间进行的计算返回到td进行插值。

并且如前所述-更改#txt的innerHTML并不是非常有角度的-您应该通过更改传递到后面模型的数据来更改值,以便可以在数据更改时更新DOM。

答案 1 :(得分:0)

更改此行:

document.getElementById('txt').innerHTML = month + "/" + day + "/" +year +" "+h+":"+m;

收件人:

return month + "/" + day + "/" +year +" "+h+":"+m;

第一次调用该方法时,.innerHTML就会删除您的插值指令{{}},并且永远不会再更新。