gpt4 book ai didi

javascript - angular.injector 数组值不返回当前值

转载 作者:行者123 更新时间:2023-12-03 10:24:35 25 4
gpt4 key购买 nike

在我的 addChore 函数中,我显示了要添加到的数组的长度。然后在代码的后面,我尝试获取 ChoreList.chore 数组,但我注意到它不包含我刚刚添加的所有元素。

我是否缺少某些东西才能使其正常运行?

这是我正在使用的整个服务:

  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: 'liljohnny@test.com', active: true, personId: 0 },
{ name: 'Susie', dob: '03/01/2005', cell: '3035551313', carrier: 'SPRINT', email: 'susieq@test.com', 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 修改的 plunkr,我认为它位于 angular.injector 语句中:

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

因为我在 plunkr 中得到了与我的代码类似的行为。

更新#2:

感谢 Camden_kid 让我走到这一步...

由于我与 jQuery 和 Angular 的混合,我认为我已将其范围缩小到多个服务调用。

我有这段代码,允许我在与添加杂务和人员时生成的动态开关交互时进行捕获。

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

在这两者之间,我也称之为:

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

根据 Camden_kid 的说法,我不能拥有多个“myService”实例。这条线每次都会为每个人/家务组合有效地重新生成。

是否有 1 个“myService”引用但能够调用 returnChoreList 函数?

最佳答案

我已经根据您的代码创建了一个简化的应用程序,该应用程序运行良好 - 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>

编辑1:关于您更新的问题和评论这一行:

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

正在返回服务的新副本,因此数组始终为默认长度。

Edit2:这是一个工作 Plunker基于你的 Plunker。 :-)

关于javascript - angular.injector 数组值不返回当前值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29461686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com