【发布时间】:2016-05-05 06:41:51
【问题描述】:
我在第二次尝试打开模式时遇到了一个奇怪的问题,我认为这与无法正确关闭有关。我是一个非常有角度的n00b,所以我不确定我做的事情明显是错误的。模态框第一次打开,如果我取消,它将再次打开(并且永远不会出错)。当我提交时,它会第一次工作,并将数据传递给其他函数,但是如果我第二次尝试打开模式,我会收到此错误:
TypeError: v2.addCounter is not a function
at fn (eval at <anonymous> (http://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.js:13567:15), <anonymous>:4:364)
at callback (http://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.js:23934:17)
at Scope.$eval (http://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.js:16251:28)
at Scope.$apply (http://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.js:16351:25)
at HTMLButtonElement.<anonymous> (http://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.js:23939:23)
at HTMLButtonElement.m.event.dispatch (http://code.jquery.com/jquery-1.11.2.min.js:3:8549)
at HTMLButtonElement.r.handle (http://code.jquery.com/jquery-1.11.2.min.js:3:5252)
我正在使用 angularJS (1.4.9)、bootstrap (tpls-1.1.1) 和 jquery (jquery-1.3.2)。
这是我的模态框架。
<script type="text/ng-template" id="addcounter.html">
<ng-form name="vm.addCounterForm">
<div class="modal-header">
<h3 class="modal-title">Add Counter</h3>
</div>
<button type="button" style="btn" ng-click="vm.cancel()">Cancel</button>
<span ng-show="materialDistributor && materialManufacturer && materialColourGroup && materialDescription">
<button type="button" style="btn" ng-click="vm.saveCounterModal(A bunch of ng-model stuff being sent)">Save Counter
</button>
</span>
</ng-form>
我将把未编辑的模态内容留在我的 Angular 控制器文件中:
//baby's first modal
vm.addCounter = function (groupIndex, size) {
var modalInstance = $uibModal.open({
animation: true,
templateUrl: 'addcounter.html',
controller: ['$uibModalInstance', 'materials', 'groupIndex', addTableCtrl],
controllerAs: 'vm',
size: size,
resolve: {
materials: function() {return vm.materials},
groupIndex: function() {return groupIndex}
}
});
modalInstance.result.then(function (counter) {
//console.log(counter.width, counter.length, counter.shape, counter.material, counter.index);
vm.saveCounter(counter.width, counter.length, counter.shape, counter.material, counter.index, counter.groupIndex, counter.description);
}, function () {
console.log('Modal dismissed at: ' + new Date());
});
};
var addTableCtrl = function($uibModalInstance, materials, groupIndex) {
var vm = this;
vm.materials = materials;
vm.groupIndex = groupIndex;
vm.saveCounterModal = function(width, length, shape, material, index, description) {
var counter = {
width: width,
length: length,
shape: shape,
material: material,
index: index,
groupIndex: groupIndex,
description: description
};
$uibModalInstance.close(counter);
};
vm.cancel = function() {
$uibModalInstance.dismiss('cancel');
};
}
我认为关闭功能无法正常工作是否正确?正如 cmets 所说,这是婴儿的第一个模态:(
解决方案
“保存”按钮我有一个不再使用的功能。不是在调用函数的行出错,而是整个模态显示为错误的原因。希望这可以帮助其他遇到此问题的人!
【问题讨论】:
-
什么是虚拟机?您可以在这里添加更多代码或创建一个 plunker 吗?
-
关闭或关闭控制台时是否在控制台中看到
Modal dismissed at: [date]?? -
@BrianBaker,我可以看到“模态被解雇”消息。我可以通过单击取消来关闭它任意多次。当我单击模式不在的位置时,它也会关闭。 Sadfacre,vm 设置为“this”。我开始使用 $scope 进行编码,但在我正在做的其他事情的示例中,向我们推荐了“this”并将其绑定到一个变量以使其更容易。显然它“更整洁”,但作为一个 n00b,我不确定是不是这样。不过,我必须更改我的整个应用程序才能将内容更改回 $scope。我会尽快提出来的。
-
当你没有编辑
//console.log(counter.width, counter.length, counter.shape, counter.material, counter.index);行时,结果是什么? -
@BrianBaker 所有这些变量都将被填充并显示正确的数字/字符串。我用它来确保我传递了正确的变量,并在我正确发送变量后将其注释掉。
标签: angularjs twitter-bootstrap-3 bootstrap-modal