Angularjs 获取控制器中的模型数组值';s服务
几个小时以来我一直面临一个问题。我的视图模板看起来像-Angularjs 获取控制器中的模型数组值';s服务,angularjs,Angularjs,几个小时以来我一直面临一个问题。我的视图模板看起来像- <div class="row" ng-repeat="row in CampaignsService.getRows().subItems track by $index"> <div class="col-sm-2"> <select class="form-control dropDownPercent" ng-model="CampaignsService.dropDownPercent[{{C
<div class="row" ng-repeat="row in CampaignsService.getRows().subItems track by $index">
<div class="col-sm-2">
<select class="form-control dropDownPercent" ng-model="CampaignsService.dropDownPercent[{{CampaignsService.selectCounter}}]" ng-change="CampaignsService.wow(CampaignsService.dropDownPercent, $index)" ng-options="o as o for o in CampaignsService.showPercentDropDown().values">
</select>
</div>
<div class="col-sm-2" style="line-height: 32px">
of visitors send to
</div>
<div class="col-sm-4">
<select class="form-control" ng-model="campaignSelect" ng-options="campaign.Campaign.id as campaign.Campaign.title for campaign in CampaignsService.getRows().items">
<option value=""> Please select </option>
</select>
</div>
<div class="col-sm-4">
<a class="btn btn-default" target="_blank" href="">Show campaign</a>
</div>
当我使用ng model=“activitservice.dropDownPercent['{{activitservice.selectCounter}}}]”
时,它不会给出任何错误,但会将此变量作为字符串。
我的问题是如何在我的服务中创建一个模型数组并获取模型的数组值???我在stack社区中读了很多问题,但这些技巧对我来说都不管用。我的脚本下的服务是
.service('CampaignsService', ['$rootScope', 'AjaxRequests', function ($rootScope, AjaxRequests) {
this.dropDownPercent = [];
this.selectCounter = 0;
var gareeb = [];
this.showPercentDefault = 100;
// this.campaignsData = [];
this.$rowsData = {
items: [], //array of objects
current: [], //array of objects
subItems: [] //array of objects
};
this.getRows = function () {
return this.$rowsData;
}
this.addNewRow = function () {
var wowRow = {}; //add a new object
this.getRows().subItems.push(wowRow);
this.selectCounter++;
gareeb.push(0);
}
this.calculatePercentages = function (index) {
angular.forEach(this.getRows().current, function (data, key) {
if (key == index) {
console.log(data);
}
})
}
this.showPercentDropDown = function ($index) {
var balle = 0;
var start;
angular.forEach(gareeb, function (aha, keywa) {
balle += aha;
})
var last = 100 - balle;
var final = [];
for (start = 0; start <= last; start += 10) {
final.push(start);
}
return this.values = {
values: final,
};
}
this.wow = function (valueWa, keyWa) {
console.log(this.dropDownPercent);
gareeb[keyWa] = valueWa;
this.changePercentDropDown();
}
this.changePercentDropDown = function () {
var angElement = angular.element(document.querySelector('.dropDownPercent'));
angular.forEach(angElement, function (data, key) {
console.log(data);
})
}
}])
非常感谢。因为您处于角度表达式的上下文中,所以不需要插值标记
{{…}
。所以ngModel指令应该如下所示:
ng-model="CampaignsService.dropDownPercent[CampaignsService.selectCounter]"
当我添加新行时,所有下拉列表中都会显示CampaignsService.dropDownPercent模型的值。你能告诉我为什么会这样吗?我知道双向/多路数据绑定,但现在我的模型是数组类型,因此在下一个下拉列表中,不应更改值。因为
activitsservice.selectCounter
对所有行都是相同的。您可以尝试使用ng model=“ActivationsService.dropDownPercent[$index]”来代替。不,并非所有行都是相同的。您可以在我的服务中看到这个.addNewRow函数。我将这个计数器变量值增加1。当我点击此函数时,将添加一个新对象,计数器变量activitsservice.selectCounter将增加1。
ng-model="CampaignsService.dropDownPercent[1]"
ng-model="CampaignsService.dropDownPercent[2]"
ng-model="CampaignsService.dropDownPercent[3]"
ng-model="CampaignsService.dropDownPercent[CampaignsService.selectCounter]"