angularJS使用rootscope创建父域和子模态框通用的属性与函数
1. 在声明创建controller指明引用$rootscope
reviewInterfaceDo.controller('reviewInterfaceDo', function($scope, $rootScope, $http, $uibModal, $uibModalInstance, toastr,parameterRecord,user)
2. 在controller中声明创建rootscope型变量commonScope ,并配置此scope内的函数和属性
//define root scope for modal use var commonScope = $rootScope.$new(); commonScope.rootSaveScore = function (userScoreList) { if (userScoreList != null && userScoreList.length > 0) { var fd = new FormData(); var userScoreRecords = angular.toJson(userScoreList); fd.append('userScoreRecords', userScoreRecords); $http.post('/reviewProcess/save', fd, { transformRequest: angular.identity, headers: { 'Content-Type': undefined } }) .success(function (data){ toastr.success("submit "+data+" score record success"); }) .error(function (data) { toastr.error("submit failed"); }); } };
3. 在打开模态框的方法中传入commonScope
$scope.openModal= function() {
$scope.getReviewedScore();
$uibModal.open({
templateUrl: 'save.html',
controller: 'saveController',
scope: commonScope,
resolve: {
parentModalInstance: function() {
return $uibModalInstance;
},
userScoreList : function () {
return $scope.userScoreList;
}
}
});
}
4. 在子模态框的controller中接收scope
saveController.controller('saveController', function($scope, $http, $uibModalInstance, parentModalInstance, toastr,userScoreList)
5. 最后就可以在子模态框的controller中调用commonScope 中的方法和属性啦
$scope.save= function() {
//save reviewed score
$scope.rootSaveScore($scope.userScoreList);
//close modal
$uibModalInstance.dismiss('cancel');
parentModalInstance.close();
};
* 在使用resolve传值时:
$scope.deleteVehicle = function(flag, instance){ debugger; var modalInstance = $uibModal.open({ templateUrl: 'common-delete.html', controller: 'VehicleDeleteCtrl', animation: true, resolve: { instance: instance, // 对象可以直接穿 flag: function() { // 其他比如字符串需要使用函数传 return flag; } }, size: 'lg' }); // 按下标删除 modalInstance.result.then(function() { $scope.vehicles.splice($scope.vehicles.indexOf(instance), 1);