在模态和控制器之间传递数据
Passing data between modal and controller
如何使数据在控制器中可用?我创建了一个非常简单的 Plunk,它应该以模式在 $scope 上显示数据。然后我需要更新数据,并且只在单击“确定”时更新 $scope。单击“取消”将放弃更改。
但在进行该步骤之前,我需要使范围可用于模态。大多数示例使用两个控制器。我是否需要另一个控制器,如本例所示:Passing Data to Twitter Bootstrap Modal in Angular?在我的控制器中,我有以下内容:
$scope.open = function(){
var modalInstance = $uibModal.open({
templateUrl: 'modal.html',
controller: 'ModalInstanceController',
resolve: {
users: function() {
return $scope.users;
}
}
});
};
如何在模板中显示用户?笨蛋在这里:http://plnkr.co/edit/FuXjSwtljQtFYOtFRV18?p=preview
为了能够访问控制器的范围,您需要在创建它的实例时将范围对象传递给模式:
$scope.open = function() {
var modalinstance = $uibModal.open({
scope: $scope,
templateUrl: 'modal.html',
resolve: {
users: function() {
return $scope.users;
}
}
})
};
这样 Angular 将创建控制器的子范围 $scope
因此您将能够访问模态范围内的项目:
你可以只用一个控制器来完成,这只是一个 "dirty" 解决方案,因为两个 html 文件将共享同一个控制器,这可能是一个问题。
您面临的问题是在模式中您没有定义 scope
,因此您正在做的 foreach (ng-repeat)
没有获取任何元素
您可以通过将 modal.html 更改为
轻松修复它
<div ng-controller="modalController"><div class="modal-header">
<h3 class="modal-title">Modal</h3>
</div>
<div class="modal-body">
<p>Existing users:</p>
<ul>
<li ng-repeat="user in users">{{user}}</li>
</ul>
</div>
<div class="modal-footer">
<button class="btn btn-default" type="button">Close</button>
</div>
</div>
如你所见,现在这个模态有一个控制器(与主 window 相同)因此会有一个 scope
或者只是将范围传递给模态定义添加
var modalinstance = $uibModal.open({
scope: $scope,...
很脏,你是 "polluting" 范围,但它有效:)
这是我当前项目的一些代码,如果您想在模态上使用任何 ng-click,您的函数必须驻留在 ModalInstanceController
app.controller('dashboardCtrl', function ($scope, $rootScope, $location, $http, Data, $uibModal ) {
$scope.users = '';
$scope.open = function(){
var modalInstance = $uibModal.open({
templateUrl: 'modal.html',
controller: 'ModalInstanceController',
resolve: {
users: function() {
return $scope.users;
}
}
})
}
});
app.controller('ModalInstanceController', function ($scope, $uibModal, $uibModalInstance, users, $rootScope, $http, Data) {
$scope.ok = function () {
$uibModalInstance.close($scope.selected.item);
}
$scope.cancel = function () {
$uibModalInstance.dismiss('cancel');
}
$scope.users = users ;
$scope.selected = {
users: $scope.users[0]
};
});
您可以在模式中访问范围 -
$scope.open = function(){
var modalinstance = $uibModal.open({
templateUrl: 'modal.html',
scope:$scope
})
};
如何使数据在控制器中可用?我创建了一个非常简单的 Plunk,它应该以模式在 $scope 上显示数据。然后我需要更新数据,并且只在单击“确定”时更新 $scope。单击“取消”将放弃更改。
但在进行该步骤之前,我需要使范围可用于模态。大多数示例使用两个控制器。我是否需要另一个控制器,如本例所示:Passing Data to Twitter Bootstrap Modal in Angular?在我的控制器中,我有以下内容:
$scope.open = function(){
var modalInstance = $uibModal.open({
templateUrl: 'modal.html',
controller: 'ModalInstanceController',
resolve: {
users: function() {
return $scope.users;
}
}
});
};
如何在模板中显示用户?笨蛋在这里:http://plnkr.co/edit/FuXjSwtljQtFYOtFRV18?p=preview
为了能够访问控制器的范围,您需要在创建它的实例时将范围对象传递给模式:
$scope.open = function() {
var modalinstance = $uibModal.open({
scope: $scope,
templateUrl: 'modal.html',
resolve: {
users: function() {
return $scope.users;
}
}
})
};
这样 Angular 将创建控制器的子范围 $scope
因此您将能够访问模态范围内的项目:
你可以只用一个控制器来完成,这只是一个 "dirty" 解决方案,因为两个 html 文件将共享同一个控制器,这可能是一个问题。
您面临的问题是在模式中您没有定义 scope
,因此您正在做的 foreach (ng-repeat)
没有获取任何元素
您可以通过将 modal.html 更改为
轻松修复它<div ng-controller="modalController"><div class="modal-header">
<h3 class="modal-title">Modal</h3>
</div>
<div class="modal-body">
<p>Existing users:</p>
<ul>
<li ng-repeat="user in users">{{user}}</li>
</ul>
</div>
<div class="modal-footer">
<button class="btn btn-default" type="button">Close</button>
</div>
</div>
如你所见,现在这个模态有一个控制器(与主 window 相同)因此会有一个 scope
或者只是将范围传递给模态定义添加
var modalinstance = $uibModal.open({
scope: $scope,...
很脏,你是 "polluting" 范围,但它有效:)
这是我当前项目的一些代码,如果您想在模态上使用任何 ng-click,您的函数必须驻留在 ModalInstanceController
app.controller('dashboardCtrl', function ($scope, $rootScope, $location, $http, Data, $uibModal ) {
$scope.users = '';
$scope.open = function(){
var modalInstance = $uibModal.open({
templateUrl: 'modal.html',
controller: 'ModalInstanceController',
resolve: {
users: function() {
return $scope.users;
}
}
})
}
});
app.controller('ModalInstanceController', function ($scope, $uibModal, $uibModalInstance, users, $rootScope, $http, Data) {
$scope.ok = function () {
$uibModalInstance.close($scope.selected.item);
}
$scope.cancel = function () {
$uibModalInstance.dismiss('cancel');
}
$scope.users = users ;
$scope.selected = {
users: $scope.users[0]
};
});
您可以在模式中访问范围 -
$scope.open = function(){
var modalinstance = $uibModal.open({
templateUrl: 'modal.html',
scope:$scope
})
};