【问题标题】:"Error while interpolating {{ " using angularjs in my code“在我的代码中使用 angularjs 插入 {{ 时出错”
【发布时间】:2015-12-13 06:25:36
【问题描述】:

当星期天是星期天时我收到错误。星期一到星期六它在星期天工作时我收到错误 错误:插值时出错:{{isOpen(dealer.Day)}} TypeError:无法读取未定义的“替换”属性

var ds= 'Sun Dec 13 2015 14:04:42 GMT+0530 (India Standard Time)';
      var now = new Date(ds);

如果您更改日期和日期,它的工作正常

var ds= 'Sat Dec 12 2015 14:04:42 GMT+0530 (India Standard Time)';
      var now = new Date(ds);

我在下面添加了我的代码,请帮助我。

angular.module('myApp', [])
  .controller("myCntrl", function($scope, $filter) {

    $scope.isOpen = function(dealerSchedule) {
	var ds= 'Sun Dec 13 2015 14:04:42 GMT+0530 (India Standard Time)';
      var now = new Date(ds);
      //var now = new Date();
      //---if you change day and date you will not get error
      //var ds= 'Sat Dec 12 2015 14:04:42 GMT+0530 (India Standard Time)';
      //var now = new Date(ds);
	  
      var times = dealerSchedule[Object.keys(dealerSchedule)[now.getDay() - 1]].replace(/(\d\d\:\d\d)(AM|PM)/g, '1/1/1900 $1 $2').split(" - ");
      var nowTime = new Date('1/1/1900 ' + now.toLocaleTimeString(navigator.language, {
        hour: '2-digit',
        minute: '2-digit',
        hour12: true
      }));
	  console.log(nowTime);
      var response = (times == "Leave" ? "Leave" : (nowTime >= new Date(times[0]) && nowTime <= new Date(times[1]) ? "Open Now" : "Closed Now"));
      return response;
    };

	
    $scope.dealers = [{

      S_Email_id: "aditiya@gmail.com ",
      status: "",
      Store_Name: "Adtiya Samsung Store",
      Day: {
        "monday": "09:10 AM - 06:30 PM",
        "tuesday": "09:10 AM - 12:00 PM",
        "wednesday": "09:10 AM - 06:30 PM",
        "thursday": "09:10 AM - 06:30 PM",
        "friday": "09:10 AM - 06:30 PM",
        "saturday": "10:15 AM - 04:15 PM",
        "sunday": "10:15AM - 04:15PM"
      },
    }, {

      S_Email_id: "rajs@gmail.com",
      status: "",
      Store_Name: "sri shakthi mobile service",
      Day: {
        "monday": "09:00 AM - 06:00 PM",
        "tuesday": "09:00 AM - 06:00 PM",
        "wednesday": "09:00 AM - 06:00 PM",
        "thursday": "09:00 AM - 06:00 PM",
        "friday": "09:00 AM - 06:00 PM",
        "saturday": "09:00AM - 06:00PM",
        "sunday": "Leave"
      },

    }, {

      S_Email_id: "sprtive23@gmail.com",
      status: "",
      Store_Name: "sun mobile service center ",
      Day: {
        "monday": "08:30 AM - 07:30 PM",
        "tuesday": "02:30 PM - 07:30 PM",
        "wednesday": "08:30 AM - 07:30 PM",
        "thursday": "08:30 AM - 07:30 PM",
        "friday": "08:30 AM - 07:30 PM",
        "saturday": "08:15 AM - 02:15 PM",
        "sunday": "8:15	AM - 12:15AM"
      },

    }, {

      S_Email_id: "super@gmail.com ",
      status: "",
      Store_Name: "ragu mobile service center ",
      Day: {
        "monday": "10:00 AM - 10:00 PM",
        "tuesday": "10:00 AM - 10:00 PM",
        "wednesday": "10:00 AM - 04:00 PM",
        "thursday": "10:00 AM - 10:00 PM",
        "friday": "10:00 AM - 10:00 PM",
        "saturday": "leave",
        "sunday": "leave"
      },


    }]
    //var date = new Date();

    //$scope.hhmmsstt = $filter('date')(new Date(), 'hh:mm:ss a');
    //console.log($scope.hhmmsstt);
  })
//]]>
<script type='text/javascript' src='https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.1/angular.min.js'></script>
<div ng-app="myApp">
  <div ng-controller="myCntrl">
    <label>Search on Label</label>
    <br>
    <input ng-model="query" type="text" placeholder="Search for name" />
    <br>
    <br>

    <div ng-repeat="dealer in dealers">

      {{dealer.Store_Name}}
      <br>{{dealer.S_Email_id}}
      <br>{{dealer.Day}}
      <br>
      <input type="button" value="order" />
          <span>{{isOpen(dealer.Day)}}</span>
      <br>
      <br>
      <br>

    </div>

  </div>
</div>

检查我的代码我收到错误

请不要放弃投票,因为我不知道为什么它不起作用我是技术新手。帮帮我

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    问题出在

    now.getDay() - 1 将在周日失败(getday() 将返回 0)

    你应该检查类似的,

    var dayCheck = now.getDay() == 0 ? 6 : now.getDay() - 1;
    var times = dealerSchedule[Object.keys(dealerSchedule)[dayCheck]].replace(/(\d\d\:\d\d)(AM|PM)/g, '1/1/1900 $1 $2').split(" - ");
    

    【讨论】:

    • @martin 用一些日志更新了您的小提琴 - 查看浏览器日志以了解发生了什么。如果你在星期天输出now.getDay() - 1,因为now.getDay()返回0,它输出NaN,这会导致你的错误。为 Amitd 的快速修复点赞。另一个建议是查看是否可以更改 JSON 的数据结构,以便 Days 属性以星期日而不是星期一开头。
    【解决方案2】:

    错误来自:

    var times = dealerSchedule[Object.keys(dealerSchedule)[now.getDay() - 1]].replace(/(\d\d\:\d\d)(AM|PM)/g, '1/1/1900 $1 $2').split(" - ");
    

    您在这条线上想要实现的目标有点令人困惑?

    如果您要将代码放入您的问题中,也可以作为将来的注释,删除注释掉的代码,因为它不需要。

    另外我会考虑升级你的角度版本。

    【讨论】:

    • 如果星期天意味着我收到错误 var ds= 'Sun Dec 13 2015 14:04:42 GMT+0530 (India Standard Time)'; var now = new Date(ds);check my fiddle jsfiddle.net/rpbn6u23/79/.if day is sunday 意味着我出错了
    • 如果前几天它的工作请检查这个jsfiddle.net/rpbn6u23/80。如果它的星期天它不工作检查jsfiddle.net/rpbn6u23/79
    • 你现在为什么要解析日期?为什么不现在 var = new Date();
    • 好的,我注意到了一些事情......你现在这样做有什么特别的原因。getDay() - 1?是否希望根据印度时间检查它目前是否开放?
    【解决方案3】:

    您的代码存在问题

    now.getDay() - 1
    

    Date 对象中的天数是从零开始的索引,因此在星期日,getDay() 将返回 0,上面的语句将评估为 -1,这是您的 @987654327 的键数组中的无效索引@ 目的。要从日期的getDay() 正确查找day,我建议您使用getDay() 返回的索引并更改您的Day 对象,以便星期天排在第一位,并与下面的规范同步。

    Day: {
            "sunday": "10:15AM - 04:15PM",
            "monday": "09:10 AM - 06:30 PM",
            "tuesday": "09:10 AM - 12:00 PM",
            "wednesday": "09:10 AM - 06:30 PM",
            "thursday": "09:10 AM - 06:30 PM",
            "friday": "09:10 AM - 06:30 PM",
            "saturday": "10:15 AM - 04:15 PM"
          }
    

    您的 JSON 对象中Day 的不一致也很少

    1. 有时您使用leave,有时使用Leave。所有 Day 对象都应该相同
    2. 对于第三家经销商(sun mobile 服务中心),您提到周日时间为8:15 AM - 12:15AM,而它应该是“上午 8:15 - 下午 12:15”(从早上 8.15 到下午 12.15)

    更正所有这些一致性,添加一些新逻辑以从您的 Day 对象派生日期,这是一个有效的 Pen,它将显示 Open Now / Closed Now / 离开。

    希望这会有所帮助:)

    【讨论】:

    • 你看到我笔的逻辑了吗?它是一种根据经销商时间表和当前日期和时间显示状态的有效解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    • 2016-03-14
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多