i have a uibootstrap accordion "angular_accordion.html" with a button opening modal "new_project_modal.html", values entered in modal are shown in view "angular_tabel.html" in twitter bootstrap panel with a button to open the same modal "new_project_modal.html", i want to show values in input fields so that the user can edit, but values are not available in scope in controller "modal_new_project.js".
Another thing i dont get is that in "new_project_modal.html", ng-controller="ModalDemoCtrl as modalScope", i have to use ng-model="modalScope.name", ng-model="name" doesnt work, no data binding, no scope in controller, why? when it works like ng-model="something" in other views without the need of "modalScope."?
AngularJS: 1.4.7
UI Bootstrap: 0.14.3
angular_accordion.html:
<div ng-controller="UibAccordionCtrl">
......
.....
<div ng-controller="ModalDemoCtrl">
<a href="#" id="project-popover" class="btn btn-default center-block" ng-click="open()"><i class="fa fa-bar-chart-o pull-left" id="test1"></i>Create Project</a>
</div>
............
.......
</div>
angular_tabel.html:
<div ng-controller="TabsCtrl as tabsController">
.........
<div class="panel panel-default" id="outer-panel" ng-repeat="panel in panels">
.............
............
.........
<div ng-controller="ModalDemoCtrl">
<button class="btn btn-default" ng-click="editProject(panel.name)"><i class="fa fa-edit"></i></button>
</div>
........
.......
</div>
new_project_modal.html:
<div ng-controller="ModalDemoCtrl as modalScope">
...............
.............
<form class="form-horizontal">
...........
<input type="text" class="form-control" id="userName" placeholder="Name" ng-model="modalScope.name">
.......
</form>
<div class="modal-footer">
<button class="btn btn-primary" ng-click="ok(modalScope.name)">Create</button>
<button class="btn btn-warning" ng-click="cancel()">Cancel</button>
</div>
</div>
modal_new_project.js:
var app = angular.module('modalNewProjectModule', ['ui.bootstrap']);
app.controller('ModalDemoCtrl', function ($scope, $uibModal, $log) {
$scope.open = function () {
var modalInstance = $uibModal.open({
templateUrl: 'partials/new_project_modal.html',
controller: 'ModalInstanceCtrl',
scope: $scope,
windowClass: 'test-modal-width',
backdrop: false,
resolve: {
projectName: function () {
return $scope.name;
}
}
});
};
$scope.editProject = function (name) {
var modalInstance = $uibModal.open({
templateUrl: 'partials/new_project_modal.html',
controller: 'EditModalInstanceCtrl',
scope: $scope,
windowClass: 'test-modal-width',
backdrop: false,
resolve: {
projectName: function(){
return name;
}
}
});
};
});
app.controller('ModalInstanceCtrl', function ($scope, $uibModalInstance, projectName, NewProjectService) {
$scope.ok = function(projectName) {
var new_project_params = {
'name': projectName,
'status': 'Status New'
};
NewProjectService.setValue(new_project_params);
$uibModalInstance.close();
};
$scope.cancel = function () {
$uibModalInstance.dismiss('cancel');
};
});
app.controller('EditModalInstanceCtrl', function ($scope, $uibModalInstance, projectName, NewProjectService) {
$scope.name = projectName; //undefined
$scope.ok = function(project) {
var new_project_params = {
'name': projectName,
'status': 'Status New'
};
NewProjectService.setValue(new_project_params);
$uibModalInstance.close();
};
$scope.cancel = function () {
$uibModalInstance.dismiss('cancel');
};
});