로그인 한 사용자 userName
목록 userName
에서 트위터 부트 스트랩으로을 전달하고 싶습니다 modal
. angularjs 를 통해 데이터가 렌더링되는 angularjs 와 함께 grails 를 사용하고 있습니다.
구성
내 성배보기 페이지 encouragement.gsp
는
<div ng-controller="EncouragementController">
<g:render template="encourage/encouragement_modal" />
<tr ng-cloak
ng-repeat="user in result.users">
<td>{{user.userName}}</rd>
<td>
<a class="btn btn-primary span11" href="#encouragementModal" data-toggle="modal">
Encourage
</a>
</td>
</tr>
내는 encourage/_encouragement_modal.gsp
것입니다
<div id="encouragementModal" class="modal hide fade">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-hidden="true">×</button>
<h3>Confirm encouragement?</h3>
</div>
<div class="modal-body">
Do you really want to encourage <b>{{aModel.userName}}</b>?
</div>
<div class="modal-footer">
<button class="btn btn-info"
ng-click="encourage('${createLink(uri: '/encourage/')}',{{aModel.userName}})">
Confirm
</button>
<button class="btn" data-dismiss="modal" aria-hidden="true">Never Mind</button>
</div>
</div>
그래서, 어떻게 전달할 userName
수 encouragementModal
있습니까?
답변
매개 변수를 전달하려면 resolve를 사용하고 컨트롤러에 항목을 삽입해야합니다.
$scope.Edit = function (Id) {
var modalInstance = $modal.open({
templateUrl: '/app/views/admin/addeditphone.html',
controller: 'EditCtrl',
resolve: {
editId: function () {
return Id;
}
}
});
}
이제 다음과 같이 사용할 경우 :
app.controller('EditCtrl', ['$scope', '$location'
, function ($scope, $location, editId)
이 경우 editId는 정의되지 않습니다. 다음과 같이 주입해야합니다.
app.controller('EditCtrl', ['$scope', '$location', 'editId'
, function ($scope, $location, editId)
이제 매끄럽게 작동 할 것입니다. 한 번 주입하면 모든 것이 작동하기 시작합니다.
답변
다른 하나는 작동하지 않습니다. 문서에 따르면 이것이 당신이 해야하는 방법입니다.
angular.module('plunker', ['ui.bootstrap']);
var ModalDemoCtrl = function ($scope, $modal) {
var modalInstance = $modal.open({
templateUrl: 'myModalContent.html',
controller: ModalInstanceCtrl,
resolve: {
test: function () {
return 'test variable';
}
}
});
};
var ModalInstanceCtrl = function ($scope, $modalInstance, test) {
$scope.test = test;
};
답변
또는 새 범위를 만들고 범위 옵션을 통해 매개 변수를 전달할 수 있습니다.
var scope = $rootScope.$new();
scope.params = {editId: $scope.editId};
$modal.open({
scope: scope,
templateUrl: 'template.html',
controller: 'Controller',
});
모달 컨트롤러에서 $ scope를 전달하면 및 itemsProvider 또는 이름을 확인한 내용을 전달할 필요가 없습니다.
modalController = function($scope) {
console.log($scope.params)
}
답변
또한 모달 인스턴스와 함께 새 속성을 추가하여 모달 컨트롤러에 매개 변수를 쉽게 전달하고 모달 컨트롤러로 가져올 수도 있습니다. 예를 들면 :
다음은 모달보기를 열고 싶은 클릭 이벤트입니다.
$scope.openMyModalView = function() {
var modalInstance = $modal.open({
templateUrl: 'app/userDetailView.html',
controller: 'UserDetailCtrl as userDetail'
});
// add your parameter with modal instance
modalInstance.userName = 'xyz';
};
모달 컨트롤러 :
angular.module('myApp').controller('UserDetailCtrl', ['$modalInstance',
function ($modalInstance) {
// get your parameter from modal instance
var currentUser = $modalInstance.userName;
// do your work...
}]);
답변
나는 아래와 같이 시도했다.
Encourage 버튼에서 ng-click
angularjs 컨트롤러를 호출 했습니다 .
<tr ng-cloak
ng-repeat="user in result.users">
<td>{{user.userName}}</rd>
<td>
<a class="btn btn-primary span11" ng-click="setUsername({{user.userName}})" href="#encouragementModal" data-toggle="modal">
Encourage
</a>
</td>
</tr>
내가 설정 userName
의 encouragementModal
AngularJS와 컨트롤러에서.
/**
* Encouragement controller for AngularJS
*
* @param $scope
* @param $http
* @param encouragementService
*/
function EncouragementController($scope, $http, encouragementService) {
/**
* set invoice number
*/
$scope.setUsername = function (username) {
$scope.userName = username;
};
}
EncouragementController.$inject = [ '$scope', '$http', 'encouragementService' ];
userName
에서 angularjs 컨트롤러에서 값을 얻기 위해 place ( )를 제공했습니다 encouragementModal
.
<div id="encouragementModal" class="modal hide fade">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-hidden="true">×</button>
<h3>Confirm encouragement?</h3>
</div>
<div class="modal-body">
Do you really want to encourage <b>{{userName}}</b>?
</div>
<div class="modal-footer">
<button class="btn btn-info"
ng-click="encourage('${createLink(uri: '/encourage/')}',{{userName}})">
Confirm
</button>
<button class="btn" data-dismiss="modal" aria-hidden="true">Never Mind</button>
</div>
</div>
그것은 효과가 있었고 나는 나 자신에게 인사했습니다.
답변
이러한 요구에 대해 Angular UI를 실제로 사용해야합니다. 확인 : Angular UI 대화 상자
간단히 말해서 Angular UI 대화 상자를 사용하여 컨트롤러에서 대화 상자 컨트롤러로 변수를 전달할 수 있습니다 resolve
. “보낸 사람”컨트롤러는 다음과 같습니다.
var d = $dialog.dialog({
backdrop: true,
keyboard: true,
backdropClick: true,
templateUrl: '<url_of_your_template>',
controller: 'MyDialogCtrl',
// Interesting stuff here.
resolve: {
username: 'foo'
}
});
d.open();
그리고 대화 컨트롤러에서 :
angular.module('mymodule')
.controller('MyDialogCtrl', function ($scope, username) {
// Here, username is 'foo'
$scope.username = username;
}
편집 : ui-dialog의 새 버전부터 해결 항목은 다음과 같습니다.
resolve: { username: function () { return 'foo'; } }
답변
컨트롤러 함수를 만들고 $ scope 개체로 매개 변수를 전달할 수 있습니다.
$scope.Edit = function (modalParam) {
var modalInstance = $modal.open({
templateUrl: '/app/views/admin/addeditphone.html',
controller: function($scope) {
$scope.modalParam = modalParam;
}
});
}