2015-12-29 2 views
3

Я хочу добавить новый массив в существующий массив динамически. Здесь я пытаюсь добавить массив в существующий массив в общей службе.Как добавить новый массив в существующий массив динамически

вот мой код

var shareService = angular.module('ibaDataService', []); 
shareService.service('shareData', function() { 
    this.comonData = []; 
    this.tabData = []; 
    this.pushArray = function (arrayName) { 
     //this.comonData.push(arrayName[]); 
      // here i want to add commonData.newArray[] 
} 
    }); 

ответ

1

Вам необходимо сохранить значение this в переменной, прежде чем ссылаться на нее в гнездо function.

Например:

var shareService = angular.module('ibaDataService', []); 
shareService.service('shareData', function() { 
    var self = this; 
    this.comonData = {}; 
    this.tabData = []; 
    this.pushArray = function (key, value) { 
     // self holds the value of the parent instance 
     self.comonData[key] = value; 

}}); 

self в настоящее время используется, чтобы сохранить ссылку на исходный this даже в зависимости от контекста изменилось (внутри другой функции).

+0

Благодарю вас, его показывает некоторую ошибку синтаксиса на arrayName [] – Ajith

+0

вправо, удалите '[]', поэтому он становится 'self.comonData.push (arrayName);' – Filype

+0

Filype, я передаю имя массива как «новое», но icant access this.comonData.new. – Ajith

0

Вы можете объединить массив с помощью CONCAT:

var hege = ["Cecilie", "Lone"]; 
var stale = ["Emil", "Tobias", "Linus"]; 
var children = hege.concat(stale); 
// Result is: Cecilie,Lone,Emil,Tobias,Linus 

В вашем случае:

this.comonData.concat(someOtherArray); 
1

Использование Array#concat:

this.comonData = this.comonData.concat(arrayName); 

Метод concat() возвращает новый массив, состоящий из массива, на который он называется, соединен с массивом (-ами) и/или значением (-ами), представленным в качестве аргументов.

1

использование array concat

var shareService = angular.module('ibaDataService', []); 
shareService.service('shareData', function() { 
    this.comonData = []; 
    this.tabData = []; 
    this.pushArray = function (arrayName) { 
     this.comonData = this.comonData.concat(arrayName); 
    } 
}); 
+0

спасибо azzi, это включает в себя ["arrayName"], я хочу получить доступ к новому массиву, например this.commonData.newArray – Ajith

1

Как вы хотите сделать это динамически, я думаю, вы могли бы использовать «часы»:

$rootScope.$watch('variableToWatch', function() { 
     // - Call concat code here 
    }); 

Ваш код затем выполняется каждый раз, когда изменился источник данных , Конечно, вам нужно добавить зависимость «$ rootScope» к вашему сервису.

+0

Elo, можно ли здесь вставить пример? – Ajith

+0

Я думаю, что метод concat хорошо описывается другими ответами. Окончательный код зависит от способа получения данных, которые вы хотите добавить в массив (вызов Ajax?).И более того, я не уверен, что правильно понял вашу последнюю потребность, но как только вы отметили «динамично», я думал, что наблюдатели с часами могут помочь. – Elo

Смежные вопросы