AngularJS: проверить, существует ли переменная со стороны API - PullRequest
0 голосов
/ 09 мая 2018

У меня есть объект метаданных json со стороны api, содержащий некоторое свойство изображения, и я хочу проверить, существует ли свойство или нет, я работаю с angularJS, coffeescript и haml для представлений.

вот код js, который выбирает данные:

getImages = ->
    listImage = []

    for sheet in $scope.report.report_sheets()
      for composed in sheet.report_fragments()
        for fragment in composed.report_fragments()
          if fragment.fragment_type is 'images'
            for media in fragment.media()
              if media.metadata.date_time_original
                media.metadata.date_time_original = moment.utc(media.metadata.date_time_original).local().format('DD-MMM-YYYY h:mm A')
              listImage.push media
    listImage

а вот сторона хамла:

.directive-report-images{ ng_show: 'conditionIsChecked && fragment._parentConditionChecked' }
  .row
    .col-md-4
      .title
        %h5.black {{ fragment.title }}
    .col-md-8
      %report_fragment_visibility
      .row{ ng_if: 'fragment.media().length <= 2' }
        .col-md-6.thumbnail{ ng_repeat: "img in fragment.media() | notArchived | orderBy:'order'" }
          %img.pointer{ ng_src: "{{ img.contentUrl() }}", ng_click:'openCarouselModal(img)' }
          %p {{ img.comment }}
          .photo-date{ng_if: "img.metadata.date_time_original" }
            %p {{ img.metadata.date_time_original}}

  .row{ ng_if: 'fragment.media().length > 2' }
    .col-md-12
      .row
        .col-md-4.thumbnail{ ng_repeat: "img in fragment.media() | notArchived | orderBy:'order'" }
          %img.pointer{ ng_src: "{{ img.contentUrl() }}", ng_click:'openCarouselModal(img)' }
          %p {{ img.comment }}
          %p.photo-date {{ img.metadata.date_time_original }}

Я хочу проверить media.metadata.date_time_original , чтобы показать его, если он существует, а не, если ноль!

Я получил эту ошибку в моей консоли:

TypeError: Невозможно прочитать свойство date_time_original с нулевым значением

1 Ответ

0 голосов
/ 09 мая 2018

Вам нужно поставить чек, используя его, то есть проверить, существует ли media.metadata, а затем продолжить.

Ваш текущий код:

getImages = ->
    listImage = []

    for sheet in $scope.report.report_sheets()
      for composed in sheet.report_fragments()
        for fragment in composed.report_fragments()
          if fragment.fragment_type is 'images'
            for media in fragment.media() 
                media.metadata.date_time_original = moment.utc(media.metadata.date_time_original).local().format('DD-MMM-YYYY h:mm A')
              listImage.push media
    listImage

Изменить на:

getImages = ->
    listImage = []

    for sheet in $scope.report.report_sheets()
      for composed in sheet.report_fragments()
        for fragment in composed.report_fragments()
          if fragment.fragment_type is 'images'
            for media in fragment.media() 
                if (media.metadata) { // check here
                  media.metadata.date_time_original = moment.utc(media.metadata.date_time_original).local().format('DD-MMM-YYYY h:mm A')
                  listImage.push media
                 }
    listImage
...