繁体   English   中英

在打开的Angular UI Bootstrap Modal中更新父控制器作用域时,该函数仅运行一次

[英]The function runs only once when updating parent controller scope in opened Angular UI Bootstrap Modal

重构测试应用程序后端的代码后,我遇到了问题。 测试有问题和答案,每个问题有多个答案,只有其中一个是正确的。

经过一些调试后,一切似乎都可以正常工作,但是所有的问题和答案管理逻辑都位于一个控制器中。 我将答案逻辑移到了单独的嵌套控制器上,之后又陷入了这个问题。 尝试了不同的方法,但没有一个有帮助。

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

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

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

没有模态窗口,但有嵌套的控制器,添加效果很好。

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

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

$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);
  };

这样,您的新问题将被添加到已经存在的问题中。

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM