2015-04-09 5 views
2

У меня есть сервис «MyService», который содержит следующее:Угловая служба удаления?

this.myobj = {'dog': 'bark', 'cat': 'meow'} 

Я впрыснуть эту услугу в директиву. Внутри функции директивы связи у меня есть $ объем $ уничтожить, что делает следующее:.

console.log(MyService.myobj); 
delete MyService.myobj.dog; 
console.log(MyService.myobj); 

console.log вывод выглядит после удаления все еще отображается как:

{'dog': 'bark', 'cat': 'meow'} 

Даже если я называется удалением по ключу «собака». Что происходит? Есть ли более правильный способ удаления ключа?

ответ

3

Добавить метод сервиса, который удаляет его свойства:

var myObj = { 
dog: 'bark', 
cat: 'meow', 
delKey: function (keyName) { 
    delete this[keyName]; 
    } 
} 

Затем вызовите метод:

MyService.myobj.delKey('dog'); 

Если вы хотите, чтобы метод назначен к этой службе, который может работать на любом объект в пределах этой услуги:

myObj: { 
      dog: 'bark', 
      cat: 'meow' 
     }, 
delKey: function (obj, key) { 
      delete this[obj][key]; 
     } 

вы можете проверить это plnkr:

http://plnkr.co/edit/f0ousH69sAm3Kdr36kNJ

+0

Как раз в лучших практиках, я считаю, что это более подходит для углового. Вы хотите сохранить довольно высокий уровень абстракции. Служба должна действовать сама по себе своими собственными методами, которые затем могут быть вызваны всеми, кто в них нуждается. Похоже на это на аналогичной должности, если это может быть полезно: http://perfectionkills.com/understanding-delete/ – tpie

+0

Проблема с этим я не хочу delKey в myObj, поскольку myObj является частью оказание услуг. В идеале, если бы существовал MyService.delKeyFromMyObj («собака»), который мог бы сделать то же самое, это было бы более желательно. – Rolando

+0

проверить plnkr – tpie