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

时间:2014-07-14 10:46:10

标签: javascript angularjs twitter-bootstrap angular-bootstrap

重构Test Application后端代码后出现问题。测试有问题和答案,每个问题都有多个答案,其中只有一个是正确的。

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

目标是将Angular UI Tree(示例#4 - Groups& Categories)与Angular UI Bootstrap Modal结合使用。

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

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

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

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

1 个答案:

答案 0 :(得分: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);
  };

这样你的新问题就会被添加到现有的问题中。

希望它有所帮助。