Hello all,
I have an issue with data binding. I am using the angulat boostrap modal to send a post request to a Laravel API and I am receiving the proper information. I am pushing the result in an array, the array is updated but the DOM isn't.
Can you please point me in the right direction?
This is the form I'm using in the modal:
<div class="container" ng-controller="ProjectsController">
<div class="row title">
<h2>Project Info <small>Please fill in all the fields</small></h2>
</div>
<div class="row">
<form ng-submit="createProject()">
<div class="form-group">
<!-- <label for="project-name" class="col-sm-2 control-label">Project name:</label> -->
<div class="col-sm-12">
<input type="text" name="name" id="project-name" class="form-control" placeholder="Project name" ng-model="new_project.name" required>
</div>
</div>
<div class="form-group">
<!-- <label for="project-name" class="col-sm-2 control-label">Project name:</label> -->
<div class="col-sm-12">
<textarea name="description" id="project-description" class="form-control" rows="3" placeholder="Project description" ng-model="new_project.description" required></textarea>
<!-- <input type="text" name="description" id="project-description" class="form-control" placeholder="Project description" ng-model="new_project.description" required> -->
</div>
</div>
<div class="form-group">
<div class="pull-left">
<button type="submit" class="btn btn-primary" ng-click="ok()">Submit project</button>
</div>
<div class="pull-left">
<button type="submit" class="btn btn-primary" ng-click="cancel()">Cancel</button>
</div>
</div>
</form>
This is where I want to update the DOM and where I trigger the dialog
<div class="create-proj" ng-controller="ProjectsController">
<button id="saveProfileButton" class="primaryButton" ng-click="createModalNewProject()">Create Project</button>
</div>
<ul class="projects" ng-controller="ProjectsController">
<li ng-repeat="project in Projects">
<ul>
<li>
<h4><span class="title" ng-bind="project.name"></span>
<span class="dropdown left-navigation-project-settings-icons dropdown-toggle" data-toggle="dropdown"></span>
</h4>
</li>
</ul>
</li>
</ul>
This is the controller in angular:
angular.module('app.dashboard.projects')
.controller("ProjectsController", function($scope, $modal, $resource, ProjectsFactory){
$scope.Projects = {};
$scope.new_project = {};
$scope.createModalNewProject = function(){
// console.log("bla");
var modalInstance = $modal.open({
templateUrl: 'js/modules/projects/views/new-project.html',
controller : ModalController
});
};
$scope.createProject = function () {
ProjectsFactory.create($scope.new_project).$promise.then(function(data){
$scope.Projects.push(data.projects);
});
};
$scope.updateList = function(){
$scope.Projects.push(data.projects);
};
showAll();
function showAll(){
ProjectsFactory.show().$promise.then(function(data){
return $scope.Projects = data.projects;
});
};
});
This is the factory that I'm using:
angular.module('app.dashboard.projects')
.factory('ProjectsFactory', function ($resource) {
return $resource('api/v1/projects/:projectId', {}, {
show: { method: 'GET' },
create: { method: 'POST' },
update: { method: 'PUT', params: {id: '@id'} },
delete: { method: 'DELETE', params: {id: '@id'} }
})
});
Reference to the modal module: http://angular-ui.github.io/bootstrap/
$scope.Projects.push(data.projects);isdata.projectsone project or an array? And is$scope.Projectsan array of projects? -- Actually, you've initialized$scope.Projects = {};What are you doing pushing stuff onto an object?