私は1つのページアプリケーションに2-3つのモーダルを含めるようにしています。しかし、私はそれらのすべてを同時に働かせることに問題があります。私の最初のモーダルは正常に動作しますが、私の2番目と3番目のモーダルは可視属性を見ることに失敗します。可視属性が複数のモーダルで定義されていません
これらは私のモーダルトグル関数です:
$scope.toggleModal = function(){
$scope.showModal = !$scope.showModal;
};
$scope.toggleTestModal = function(){
$scope.showTestModal = !$scope.showTestModal;};
$scope.toggleBranchSelectModal = function(){
$scope.showBranchSelectModal = !$scope.showBranchSelectModal;
console.log('$scope.showBranchSelectModal', $scope.showBranchSelectModal);
};
は、これらは、これら3つのモーダルのための私のディレクティブです:
モーダル1
cicdapp.directive('modal', function() {
return {
template: '<div class="modal fade">' +
'<div class="modal-dialog">' +
'<div class="modal-content">' +
'<div class="modal-header">' +
'<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>' +
'<h4 class="modal-title">{{ title }}</h4>' +
'</div>' +
'<div class="modal-body" ng-transclude></div>' +
'</div>' +
'</div>' +
'</div>',
restrict: 'E',
transclude: true,
replace:true,
scope:true,
link: function postLink(scope, element, attrs) {
scope.title = attrs.title;
scope.$watch(attrs.visible, function(value){
console.log(value)
if(value == true)
$(element).modal('show');
else
$(element).modal('hide');
});
$(element).on('shown.bs.modal', function(){
scope.$apply(function(){
scope.$parent[attrs.visible] = true;
});
});
$(element).on('hidden.bs.modal', function(){
scope.$apply(function(){
scope.$parent[attrs.visible] = false;
});
});
}
};
});
モーダル2
cicdapp.directive('testmodal', function() {
console.log('Test modal')
return {
template: '<div class="modal fade">' +
'<div class="modal-dialog">' +
'<div class="modal-content">' +
'<div class="modal-header">' +
'<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>' +
'<h4 class="modal-title">{{ title }}</h4>' +
'</div>' +
'<div class="modal-body" ng-transclude></div>' +
'</div>' +
'</div>' +
'</div>',
restrict: 'E',
transclude: true,
replace:true,
scope:true,
link: function postLink(scope, element, attrs) {
scope.title = attrs.title;
scope.$watch(attrs.visible, function(value){
console.log(value)
if(value == true)
$(element).modal('show');
else
$(element).modal('hide');
});
$(element).on('shown.bs.modal', function(){
scope.$apply(function(){
scope.$parent[attrs.visible] = true;
});
});
$(element).on('hidden.bs.modal', function(){
scope.$apply(function(){
scope.$parent[attrs.visible] = false;});});}};});
モーダル3
cicdapp.directive('branchselectmodal', function() {
return {
template: '<div class="modal fade">' +
'<div class="modal-dialog">' +
'<div class="modal-content">' +
'<div class="modal-header">' +
'<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>' +
'<h4 class="modal-title">{{ title }}</h4>' +
'</div>' +
'<div class="modal-body" ng-transclude></div>' +
'</div>' +
'</div>' +
'</div>',
restrict: 'E',
transclude: true,
replace:true,
scope:true,
link: function postLink(scope, element, attrs) {
scope.title = attrs.title;
scope.$watch(attrs.visible, function(value){
if(value == true)
$(element).modal('show');
else
$(element).modal('hide');
});
$(element).on('shown.bs.modal', function(){
scope.$apply(function(){
scope.$parent[attrs.visible] = true;
});
});
$(element).on('hidden.bs.modal', function(){
scope.$apply(function(){
scope.$parent[attrs.visible] = false;
});
});
}
};
});
私は、私はそれが動作しながら、attrs.visibleのための$時計内部では、その値は、モーダル2と3のために定義されていないことを考え出しログインして、モーダルを切り替え私はこれがなぜ起こっているのか考えようとしていますが、最初のケースではうまくいく理由は考えられません。これがなぜ起こっているのかについてのどんな方向性も認められるでしょう。
私はあなたが最初にあなたのコードをリファクタリングする必要があると思います。 1つのディレクティブでパラメータとして渡すことができる間に、テンプレートでほとんど異なる3つのディレクティブが必要なのはなぜですか?また、ディレクティブの親スコープの値にアクセスしないでください。 scopeプロパティを代わりに使用します。他のダイアログもすぐに使えます:ngDialog、bootstrap modal ...? –
さて、これらの変更をすべて加えました。私はまだ同じ正確な問題があります。 –