我知道它在这里被问了很多次,我也找到了。但它不能解决我的问题。情况就是这样。我有一个 AngularJS 应用程序。我有一个列表页面。我有一个按钮要添加。当我点击添加按钮时,一个弹出窗口会带有一个表单。我想在弹出窗口出现但在同一个控制器中时更改 URL。此外,我想在每个按钮上添加一些其他按钮,一些 html 显示为弹出窗口或其他位置,但相同的控制器在 url 更改时无需重新加载所有范围。
我已经尝试过。
应用程序.js
var WebClientApp = angular.module('WebClientApp', [
'ngCookies',
'ngResource',
'ngSanitize',
'ui.bootstrap',
'ngRoute'
]);
WebClientApp.config(function ($routeProvider) {
$routeProvider
.when('/groups/:template', {
templateUrl: 'groups.html',
controller: 'GroupCtrl'
}
组.html
<div>
<button ng-click="showAdd()">Add Group</button>
<div ng-include src="views/listpage.html">
<div ng-if="addGroupModal" class="popup-modal">
<form name="addGroup" ng-submit="addandEditGroup()">
<input type="text" ng-model="group.name">
</form>
<div>
<div ng-if="editGroupModal" class="popup-modal">
<form name="editGroup" ng-submit="saveGroup()">
<input type="text" ng-model="group.name">
<input type="text" ng-model="group.desc">
<input type="text" ng-model="group.id">
</form>
<div>
控制器.js
WebClientApp.controller('GroupCtrl', function ($scope,$http, $location, $routeParams) {
$scope.group = {};
$scope.showAdd=function(){
$location.path('/groups/add');
}
var template = $routeParams.template;
switch(template){
case 'add':
loadAddPage();
break;
case 'edit':
loadEditPage();
break;
default:
loadListPageHideAll();
break;
}
function loadAddPage() {
$scope.addGroupModal=true;
$scope.editGroupModal=false;
}
function loadEditPage(){
$scope.addGroupModal=false;
$scope.editGroupModal=true;
}
function loadListPageHideAll() {
$scope.addGroupModal=false;
$scope.editGroupModal=false;
// connect to server and list all groups
}
$scope.addandEditGroup = function() {
$location.path('/groups/edit');
}
$scope.saveGroup = function() {
// Save group with $scope.group.
$location.path('/groups');
}
});
当我单击添加按钮时,它将显示添加表单。当我输入组名并提交时,它应该在更改 url 后显示编辑表单,并在表单中填写组名。但是当我尝试时,由于 url 正在更改,因此 group 对象的值变为空。我在控制器中添加了以下内容,但不知道之后该怎么做。
$scope.$on('$routeChangeStart', function(event, present, last) {
console.log(event,present,last);
});
如何将最后一条路由的范围变量分配给当前路由范围。我也尝试在搜索时重新加载为 false,但它没有用。