Angularjs — объявление фабрики с одним объектом с вложенным массивом — получение ReferenceError: не определено

У меня есть фабрика с несколькими разными методами, и я пытаюсь объявить объект, в который вложен массив. Этот один вложенный массив будет основной движущей силой для моего приложения, и он также будет иметь вложенные массивы (многие другие). Однако я хочу, чтобы вложенный массив оставался вложенным в этот объект. Я попробовал следующее, но все время получаю сообщение об ошибке, что myObject не определен.

app.factory('myService', function() {
    return {
        myobject: {name: "MockName", version: "1", myArray: []},
        addToArray: function(){
            this.myobject.myArray.push({name: "Something + " (typeof(myObject.myArray) === 'undefined' ? 1 : myObject.myArray.length, anotherArrayInside: []})
        },
        .......
    };
});

Я все еще новичок в Angular, поэтому понятия не имею, как решить эту проблему. Какие-либо предложения?

РЕШЕНО

Итак, я понял, что я не добавил один фрагмент кода, и этот фрагмент кода вызвал мою проблему:

это был myObject.myArray , поскольку myObject.myArray еще не был определен, это выдавало мне ошибку. С тех пор я изменил это на typeof(myObject) === 'undefined'


person Georgi Angelov    schedule 09.07.2013    source источник


Ответы (2)


Это проблема Javascript.

app.factory('myService', function() {
    var myobject = {name: "MockName", version: "1", myArray: []}
    return {
        addToArray: function(){
            myobject.myArray.push({name: "Something" , anotherArrayInside: []})
        },
        .......
    };
});
person jackdbernier    schedule 09.07.2013

Возможно, вы захотите прочитать это определение службы Angular: служба или фабрика

Это не проблема AngularJS, а то, что вы делаете неправильно в JavaScript.

var yourobj = {...}
return { addToArray : function() { /* now yourobj is visible */ }

в любом случае я сделал jsfiddle с вашим кодом. ваше «это» делает его видимым, но более приятный подход — шаблон раскрытия http://addyosmani.com/resources/essentialjsdesignpatterns/book/

person Eduard Gamonal    schedule 09.07.2013
comment
Это тоже сработало, но я также использовал шаблон проектирования, который вы мне показали. Я хотел бы выбрать оба ответа, но мне пришлось выбрать первый ответ. Спасибо! - person Georgi Angelov; 09.07.2013