我正在创建一个webapp,我想实现一个添加好友的选项。我已经将添加好友页面创建为带有文本输入字段的模态。我想通过在我的视图页面上显示输入来测试它。如何在我的视图页面上显示此数据?
这是我目前所拥有的
的index.html
<div ng-controller="ModalDemoCtrl">
<script type="text/ng-template" id="myModalContent.html">
<div class="modal-header">
<h3 class="modal-title">I'm a modal!</h3>
</div>
<form name = "addFriendForm">
<input ng-model = "user.name"class="form-control" type = "text" placeholder="Username" title=" Username" />
{{ user.name }}
</form>
<div class="modal-footer">
<button class="btn btn-primary" ng-click="ok()">OK</button>
<button class="btn btn-warning" ng-click="cancel()">Cancel</button>
</div>
</script>
<button class="btn btn-default" ng-click="open()">Add Friend</button>
<div> Username: {{user.name}}</div>
</div>
我的JavaScript文件:
angular.module('ui.bootstrap.demo', ['ui.bootstrap']);
angular.module('ui.bootstrap.demo').controller('ModalDemoCtrl', function ($scope, $modal, $log) {
$scope.user = {name: ""}
$scope.open = function () {
var modalInstance = $modal.open({
templateUrl: 'myModalContent.html',
controller: 'ModalInstanceCtrl',
resolve: {
items: function () {
return $scope.items;
}
}
});
modalInstance.result.then(function () {
$scope.user.name = user.name;}, function () {
$log.info('Modal dismissed at: ' + new Date());
});
};
});
angular.module('ui.bootstrap.demo').controller('ModalInstanceCtrl', function ($scope, $modalInstance) {
$scope.ok = function () {
$modalInstance.close($scope.user.name);
};
$scope.cancel = function () {
$modalInstance.dismiss('cancel');
};
});
答案 0 :(得分:20)
您可以使用modalInstance
&#39; resolve
财产;这充当模态实例和父控制器之间的链接。
将对象注入ModalInstanceController
,并将其指定给模态实例的范围。
UI Bootstraps解析与ngRouter完全相同;因此,如果resolve
无法解析某个对象,则该模式将无法打开。
var modalInstance = $modal.open({
templateUrl: 'myModalContent.html',
controller: 'ModalInstanceCtrl',
resolve: {
user: function() {
return $scope.user;
}
}
});
一种替代的,可以说更简单的方法是将父母范围传递给模态。请注意,目前在父控制器上使用controllerAs
语法时,这不起作用。
var modalInstance = $modal.open({
templateUrl: 'myModalContent.html',
controller: 'ModalInstanceCtrl',
scope: $scope
});
答案 1 :(得分:1)
我建议使用结果中的promise将值设置为控制器的变量。我理解的“解决”是将控制器的变量传递给对话框以便在对话框内使用,而不是直接更改。在你的代码示例中,将你在$ modalInstance.close()中设置的结果传递给modalInstance.result.then()就可以了。换句话说,将第18行和第19行更改为以下内容,
modalInstance.result.then(function (data) {
$scope.user.name = data;
为了稍微改进代码,您实际上可以传递整个用户对象,以便轻松地向用户对象添加其他属性,如电子邮件,地址等。我在http://plnkr.co/edit/oztYRNrCRlF1Pw289i1M?p=preview创建了一个示例。