如何在控制器中提供数据?我创建了一个非常简单的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
答案 0 :(得分:9)
为了能够访问控制器的范围,您需要在创建实例时将范围对象传递给模态:
$scope.open = function() {
var modalinstance = $uibModal.open({
scope: $scope,
templateUrl: 'modal.html',
resolve: {
users: function() {
return $scope.users;
}
}
})
};
这样Angular将创建控制器$scope
的子范围,这样您就可以访问模态范围内的项目了:
答案 1 :(得分:2)
您可以在模态中访问范围 -
$scope.open = function(){
var modalinstance = $uibModal.open({
templateUrl: 'modal.html',
scope:$scope
})
};
答案 2 :(得分:1)
你可以只使用一个控制器,这只是一个“脏”的解决方案,因为两个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>
如你所见,现在这个模态有一个控制器(与主窗口相同),因此会有一个scope
或者只是将范围传递给添加
的模态定义var modalinstance = $uibModal.open({
scope: $scope,...
是脏的,你正在“污染”范围,但它有效:)
答案 3 :(得分:0)
如果你想在你的函数必须驻留在ModalInstanceController中的模态上使用任何ng-click,那么这是我当前项目中的一些代码,它按预期工作
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]
};
});