0

重构测试应用程序后端代码后出现问题。测试有问题和答案,每个问题都有多个答案,只有一个是正确的。

经过一些调试后,一切似乎都运行良好,但所有问题和答案管理逻辑都位于一个控制器中。我将答案逻辑移动到单独的嵌套控制器,然后遇到了这个问题。尝试了不同的方法,但没有一个有帮助。

目标是将 Angular UI 树(示例 #4 - 组和类别)与 Angular UI Bootstrap Modal 结合起来。

通过设计添加和编辑问题和答案是在模式窗口中发生的。该模板位于单独的位置,因此不会在每个问题和答案中重复。当提供的数据无效时,将显示验证错误,否则显示成功警报并清除所有字段并返回默认状态(所有在模式窗口内发生的事情,它保持打开状态,只能通过点击“取消”来关闭, X 按钮或键盘 Esc 按钮)。

我需要QuestionsCtrl $scope.questions从模态窗口更新(触发按钮位于模态窗口的模板内)。点击“添加”按钮后$scope.questions,范围内将更新,ui.tree 也会在后台更新。未显示成功警报或验证错误,表单字段未清除。重复点击不会再次调用实际函数(因此它只运行一次)。

没有模态窗口但使用嵌套控制器添加工作正常。

我创建了plunk并删除了所有冗余代码,因此专注于问题会更容易。如果需要,我可以提供更多代码。例如在console.log只显示一次的 plunk 结果中。

4

1 回答 1

0

这并不是说它不起作用。但是您设置的数据错误。当你写:

$scope.add = function() {
    console.log('!!!');
    var data = [{"dataType":"question","id":2,"name":"1. Question 1","answers":[{"dataType":"answer","id":7,"name":"1. Answer 1","correct":false},{"dataType":"answer","id":8,"name":"2. Answer 2","correct":false},{"dataType":"answer","id":9,"name":"3. Answer 3","correct":false}]}];;
    $scope.setQuestions(data);
  };

和:

 $scope.setQuestions = function(data) {
    $scope.questions = data;
  };

您正在强制问题集合成为数据,而不是添加新项目。所以这就像重新初始化问题数组一样。为此,您需要使用这种setQuestions函数:

$scope.setQuestions = function(data) {
    $scope.questions.push(data);
  };

这样你的新问题就会被添加到已经存在的问题中。

希望能帮助到你。

于 2014-07-14T12:55:10.263 回答