Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在打开的UI引导模式中更新父控制器作用域时,该函数仅运行一次_Javascript_Angularjs_Twitter Bootstrap_Angular Bootstrap - Fatal编程技术网

Javascript 在打开的UI引导模式中更新父控制器作用域时,该函数仅运行一次

Javascript 在打开的UI引导模式中更新父控制器作用域时,该函数仅运行一次,javascript,angularjs,twitter-bootstrap,angular-bootstrap,Javascript,Angularjs,Twitter Bootstrap,Angular Bootstrap,重构测试应用程序后端的代码后,我遇到了一个问题。考试有问题和答案,每个问题有多个答案,其中只有一个是正确的 经过一些调试后,一切似乎都正常工作,但所有的问题和答案管理逻辑都位于一个控制器中。我把答案逻辑移到了独立的嵌套控制器上,之后就一直解决这个问题。尝试了不同的方法,但没有一种有效 目标是将Angular UI树(示例#4-组和类别)与Angular UI引导模式相结合 通过设计,在模式窗口中添加和编辑问题和答案。 模板是单独放置的,因此不会重复每个问题和答案。 当提供的数据无效时,将显示验证

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

经过一些调试后,一切似乎都正常工作,但所有的问题和答案管理逻辑都位于一个控制器中。我把答案逻辑移到了独立的嵌套控制器上,之后就一直解决这个问题。尝试了不同的方法,但没有一种有效

目标是将Angular UI树(示例#4-组和类别)与Angular UI引导模式相结合

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

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

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

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

并不是它不工作。但是你把数据设置错了。当你写作时:

$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.push(data);
  };
这样,您的新问题将添加到现有问题中


希望能有所帮助。

您缺少模式窗口的结果函数…我尝试过,但使用结果承诺仅在模式关闭或取消时有效,目标是使模式保持打开状态,以便经理可以添加适当数量的问题/答案,而无需重新打开模式。也许用这个组件是不可能的?我也尝试过Angular Strap,但遇到了同样的问题。我删除了除Angular UI引导之外的所有对其他模块的依赖。我忘记了在每个操作中都会发送ajax请求。响应是json格式的,它总是包含实际的问题列表和答案。也许这不是最好的解决方案,但它可以确保管理者始终使用实际数据(因为多个管理者可以编辑相同的测试,或者在si中(因为多个管理者可以同时编辑相同的测试,或者一个人可以在多个浏览器/浏览器的选项卡中编辑)。以这种方式更新角度或特定组件的数据是错误的吗?如果是,您可以提出什么建议?我认为遍历整个数组、比较、搜索更改以及删除/添加新元素(取决于这一点)不是最佳解决方案。此外,我们还可以强制关闭modal,使用结果承诺d再次以编程方式重新打开,但我认为它不便于用户使用。@gymnast我的意思是,您的逻辑有问题。您是否尝试了建议的代码?如果您每次都急切地更新所有问题,那么代码就可以了,它设置的数据是正确的。每次单击e modal,但您总是设置相同的数据,这就是为什么它似乎没有更新。是的,我尝试过,并且它工作正常。但我希望在每个查询中都能及时更新所有数据。数据实际上会根据成功添加或其他用户操作的不同而有所不同。在plunk中,它是相同的,只是为了简单。事实上,即使您说数据s设置正确,“!!!”只显示一次,这意味着函数add()只运行一次。更确切地说,当数组变为[](空)时,问题就出现了。我尝试在不进行硬重置的情况下更新数组,但这并不能解决问题。再次单击“添加”按钮后,数组变为空后,不会发生任何事情。
$scope.setQuestions = function(data) {
    $scope.questions.push(data);
  };