как вернуть пустую строку, если объект не определен в формах angularjs - PullRequest
0 голосов
/ 21 мая 2018

У меня есть модель формы, которую я использую для сопоставления полей формы в AngularJS.Поскольку я обновляю эти поля в базе данных, я хочу получить поля, как только пользователь отправит форму и вернется к ней.

объект формы:

vm.user = {
        userBag:[
          {
            name: nameService.nameBag[0].organizationName
          },
          {
            name: nameService.nameBag[1].organizationName,
          },
          {
            name: nameService.nameBag[2].organizationName,
          }
        ]
  };

Я закодировал формуобъект, чтобы вернуть поля базы данных, но я сталкиваюсь с ошибкой, когда пользователь изначально ничего не отправил в поле bc объект пуст.Получение ошибки:

"Ошибка типа: невозможно прочитать свойство 'organizationName' из неопределенного"

nameServie - это просто вызов get, который извлекает get.

Как мне сделать так, чтобы поля имени просто возвращали пустое значение, если nameService равно undefined?

Ответы [ 2 ]

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

Есть несколько способов выполнить то, что вы хотите:

Тернарный оператор

Используя троичный оператор, вы можете получить что-то вроде:

vm.user = {
  userBag:[
    {
      name: nameService ? nameService.nameBag[0].organizationName : ''
    },
    {
      name: nameService ? nameService.nameBag[1].organizationName : ''
    },
    {
      name: nameService ? nameService.nameBag[2].organizationName : ''
    }
  ]
};

Или оператор

С помощью оператора || вы можете оценить, существует ли путь, к которому вы хотите получить доступ, или он имеет значение:

{
  name: (nameService && ... && nameService.nameBag[0].organizationName) || ''
}

Необязательная функция доступа

Однако, чтобы сохранитьвещи DRY Я бы предпочел использовать функцию для необязательного доступа, что-то вроде:

function optionalAccess(obj, path, def) {
  const propNames = path.replace(/\]|\)/,'').split(/\.|\[|\(/);

  return propNames.reduce((acc, prop) => acc[prop] || def, obj);
}

const obj = {
  items: [{ hello: "Hello" }]
};

console.log(optionalAccess(obj, "items[0].hello", "def")); // prints: Hello
console.log(optionalAccess(obj, "items[0].he", "def")); // prints: def

TC39 Proposal

В настоящее время существует предложение вДля того, чтобы можно было использовать цепочку, что позволит вам сделать что-то вроде:

nameService?.nameBag[0]?.organizationName || ''

Если вы хотите сделать что-то подобное, есть также плагин babel

https://www.npmjs.com/package/babel-plugin-transform-optional-chaining

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

Вы можете использовать троичный оператор для достижения этого:

 vm.user = {
        userBag:[
          {
            name: (nameService && nameService.nameBag && nameService.nameBag[0]) ? nameService.nameBag[0].organizationName : ""
          },
          {
            name: (nameService && nameService.nameBag && nameService.nameBag[1]) ? nameService.nameBag[1].organizationName : ""
          },
          {
            name: (nameService && nameService.nameBag && nameService.nameBag[2]) ? nameService.nameBag[2].organizationName : "",
          }
        ]
    };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...