Reputation: 527
I am new to angularjs. I am currently doing a mobile app with ionic (that's why I have to use angularjs). I have an array and I created a add form with a button so that I can add item in the array. I have created some dummy data first because I want to test it around. I am not sure how to implement an add button so that user can add the item to that array (tempData).
Here is my code.
json-dummyObject.js
angular.module('app')
.factory('WebApi', function () {
var owners = [{
value: "Amy",
text: "Amy",
}, {
value: "Peter",
text: "Peter"
}, {
value: "Jim",
text: "Jim"
}];
var sex = [{
value: "Male",
text: "Male",
}, {
value: "Female",
text: "Female"
}];
var country = [{
value: "Canada",
text: "Canada",
}, {
value: "US",
text: "United States"
},{
value: "China",
text: "China"
}];
var tempData = [];
var someDate = new Date();
//Display 100 dummy item
for (var i = 0; i < 100; i++) {
var selectedCountry = country[Math.floor((Math.random() * country.length))];
var selectedSex = sex[Math.floor((Math.random() * sex.length))];
var selectedOwners = owners[Math.floor((Math.random() * owners.length))];
tempData.push({
id: i,
owners: selectedOwners.text,
country: selectedCountry.text,
sex: selectedSex.text,
})
};
return {
getAll: function () {
return tempData;
},
getCountry: function(){
return selectedCountry.text;
},
getSex: function(){
return selectedSex.text;
},
getOwners: function(){
return selectedOwners.text;
}
}
});
Here is my add form
<ion-view>
<ion-header-bar class="bar bar-header bar-energized">
<h1 class="title" style="color:black"> Add Data </h1>
</ion-header-bar>
<ion-content>
<div ng-controller="addCtrl">
<form name="addForm" ng-submit="submitForm()">
<label class="item item-input item-select">
<b class="input-label">Owner:</b>
<select ng-model="newOwner" required>
<option value="" title="Select Owner" selected disabled>Owner</option>
<option ng-repeat="owner in owners" value="{{owner.value}}"
ng-selected="{{owner.value== owners}}">
{{owner.value}}
</option>
</select>
</label>
<label class="item item-input item-select">
<b class="input-label">Sex:</b>
<select ng-model="newSex" required>
<option value="" title="Select Sex" selected disabled>Sex</option>
<option ng-repeat="sexItem in sex" value="{{sexItem.value}}"
ng-selected="{{sexItem.value== sex}}">
{{sexItem.value}}
</option>
</select>
</label>
<label class="item item-input item-select">
<b class="input-label">Country:</b>
<select ng-model="newCountry" required>
<option value="" title="Select Sex" selected disabled>Sex</option>
<option ng-repeat="countryItem in country" value="{{countryItem.value}}"
ng-selected="{{countryItem.value== country}}">
{{countryItem.value}}
</option>
</select>
</label>
<a class="button" ng-click="add()">Add to List</a>
</div>
</ion-content>
</ion-view>
Finally this is my controller:
angular.module('app')
.controller('addCtrl', function ($scope,WebApi) {
$scope.country = WebApi.getCountry();
$scope.sex = WebApi.getSex();
$scope.owners = WebApi.getOwners();
$scope.tempData = WebApi.getAll();
$scope.add = function(){
//Not sure how to get it work (Need help here
}
});
Upvotes: 0
Views: 11576
Reputation: 7605
Well, you can call methods from your factory so you can do something like this:
$scope.tempData
in the $scope.add
function from the controllerWebApi
factory to update the tempData
array$scope.add
functionSo, in your controller:
$scope.add = function() {
$scope.tempData.push({
id: $scope.tempData.length,
owners: owner.value,
country: countryItem.value,
sex: sexItem.value
});
WebApi.updateData($scope.tempData);
};
And in your factory:
return {
getAll: function () {
return tempData;
},
getCountry: function(){
return selectedCountry.text;
},
getSex: function(){
return selectedSex.text;
},
getOwners: function(){
return selectedOwners.text;
},
updateData: function(newData) {
tempData = newData;
}
}
Upvotes: 1