2015-04-05 51 views
0

在我的addChore函數中,我顯示要添加到的數組的長度。然後在代碼中,我試圖獲取choreList.chore數組,但我注意到它並沒有包含我剛剛添加的所有元素。angular.injector數組值不返回當前值

有什麼我失蹤讓操作正確嗎?

這是我用我的整個服務:

myapp.service('myService', function() { 

    var choreList = this; 
    choreList.chore = [{ name: 'Take out Trash', frequency: 'Sundays', allowance: '$0.25', id: 0 }, 
        { name: 'Unload Dishwasher', frequency: 'Fridays', allowance: 'Free', id: 1 }]; 

    var familyList = this; 
    familyList.people = [ 
    { name: 'Johnny', dob: '01/01/2005', cell: '3035551212', carrier: 'ATT', email: '[email protected]', active: true, personId: 0 }, 
    { name: 'Susie', dob: '03/01/2005', cell: '3035551313', carrier: 'SPRINT', email: '[email protected]', active: true, personId: 1 }]; 

    choreList.addChore = function() { 
     choreList.chore.push({ 
      name: choreList.inputChore, frequency: $('#inputFrequency').val(), 
      allowance: $('#inputAllowance').val(), id: choreList.chore.length 
     }); 

     choreList.inputChore = ''; 
     $('#inputFrequency').val('Mondays'); 
     $('#inputAllowance').val('Free'); 
     alert(choreList.chore.length); 
    }; 

    this.returnChoreList = function() { 
     return choreList.chore; 
    } 

    this.returnFamilyList = function() { 
     return familyList.people; 
    } 

    familyList.addPerson = function() { 
     //alert(familyList.inputName + ', ' + familyList.inputBirthday + ', ' + familyList.inputCellPhone, + ', ' + familyList.inputCarrier + ', ' + familyList.inputEmail); 
     familyList.people.push({ 
      name: familyList.inputName, dob: familyList.inputBirthday, 
      cell: familyList.inputCellPhone, carrier: familyList.inputCarrier, 
      email: familyList.inputEmail, active: true, personId: familyList.people.length + 1 
     }); 

     familyList.inputName = ''; 
     familyList.inputDOB = ''; 
     familyList.inputCellPhone = ''; 
     familyList.inputCarrier = 0; 
     familyList.inputEmail = ''; 
     familyList.active = true; 
    }; 

    }); 

當我拿到長度後,我加入到choreList.chore我得到的初始2項+新一個我加入(在這個例子中是3)。

但是當我調用returnChoreList函數時,我只能得到2(最初的2條記錄)。

有沒有不同的方法來做到這一點?

這是我如何打電話來獲得jQuery的數組:

$(document).on('switchChange.bootstrapSwitch', 'input[id^="chk"]', function (event, state) { 
    var clistArr; 
    clistArr = angular.injector(['ng', 'familyApp']).get("myService").returnChoreList(); 
    alert(clistArr.length); 
}); 

更新: 基於關,我從@camden_kid我認爲這是在angular.injector語句修改一個plunkr的:

http://plnkr.co/edit/fxOaJdsVk9Tb7rrEwPrB?p=preview

正如我收到類似的行爲在plunkr,因爲我有我的代碼。

更新#2:

感謝Camden_kid你爲我這麼遠......

我覺得到多個服務電話,因爲我與jQuery和角混合的我已經收窄。

我有這段代碼,當我與添加雜項和人物時生成的動態開關交互時,我可以捕獲該代碼。

$(document).on('switchChange.bootstrapSwitch', 'input[id^="chk"]', function (event, state) { 

正是在這種情況我還呼籲這個位置之間:基於

var clistArr; 
    clistArr = angular.injector(['ng', 'familyApp']).get("myService").returnChoreList(); 

過什麼Camden_kid說,我不能有「爲myService」多個實例。這條線每次都有效地重新生成每個人/雜項組合。

反正有一個「myService」的引用,但能夠調用returnChoreList函數嗎?

+0

@camden_kid以及我只在添加新項目時測試了它。它從3變爲2. – webdad3 2015-04-05 20:40:12

+0

@camden_kid - 我不知道。我從一個例子中得到了這段代碼。它返回數組。但只是最初加載的值。沒有任何新的。 – webdad3 2015-04-05 21:23:48

回答

1

我已經創建了一個基於代碼的簡化應用程序,工作正常 - Plunker

JS

var app = angular.module('app', []); 

app.controller('ctrl', ["$scope", 'myService', function($scope, myService){ 
    var vm = this; 
    vm.myService = myService; 
}]); 

app.service('myService', function() { 
    var choreList = this; 
    choreList.chore = []; 

    choreList.addChore = function() { 
    choreList.chore.push({a: 1}); 
    alert(choreList.chore.length); 
    }; 

    this.returnChoreList = function() { 
     alert(choreList.chore.length); 
     return choreList.chore; 
    } 
}); 

標記

<!DOCTYPE html> 
<html> 
<head> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script> 
    <link rel="stylesheet" href="style.css"> 
    <script src="script.js"></script> 
</head> 

<body ng-app="app" ng-controller="ctrl as vm"> 
    <button ng-click="vm.myService.addChore()">Add</button> 
    <button ng-click="vm.myService.returnChoreList()">Return</button> 
</body> 
</html> 

EDIT1:關於你的更新問題和評論這條線:

angular.injector(['ng', 'familyApp']).get("myService") 

正在返回服務的新副本,因此數組始終是默認長度。

編輯2:這是根據你的Plunker工作Plunker。 :-)

+0

我更新了我的問題,以顯示我在jQuery中使用角度注入線來獲取數組。 – webdad3 2015-04-06 11:30:20

+0

當我添加註射器代碼時,我能夠調用該函數,但數組長度返回0 ...非常相似的行爲。這是PLUNK的分叉版本: http://plnkr.co/edit/fxOaJdsVk9Tb7rrEwPrB?p=preview – webdad3 2015-04-06 11:40:15

+0

這是有道理的。無論如何,我可以按照我想要的方式做到這一點,因爲在我的代碼中有很多可以按下的按鈕。有些人使用Angular,而這恰好是使用jQuery。我希望遠離現在可用的東西。就是想。 – webdad3 2015-04-06 12:21:10