Javascript 在AngularJS中更新屏幕视图

Javascript 在AngularJS中更新屏幕视图,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,嘿,我正在开发angular 1.6应用程序,我遇到了一个问题,我不太确定如何解决。下面是对设置的简要讨论。这一页有三十个问题。客户端有很多条件逻辑,如下所示:如果用户在Q1上选择“是”,然后在Q2-4上显示,如果在Q1上选择“否”,则跳到Q5。这个问题以30个问题的形式重复 我遇到了以下场景:如果用户在Q1上选择“是”,回答Q2-4,然后意识到Q1实际上应该是“否”,该怎么办 所以我的问题是:1)如何清除模型?2)如何更新视图?因此,如果他们第三次决定Q1实际上应该是“是”,那么Q2-Q4是未

嘿,我正在开发angular 1.6应用程序,我遇到了一个问题,我不太确定如何解决。下面是对设置的简要讨论。这一页有三十个问题。客户端有很多条件逻辑,如下所示:如果用户在Q1上选择“是”,然后在Q2-4上显示,如果在Q1上选择“否”,则跳到Q5。这个问题以30个问题的形式重复

我遇到了以下场景:如果用户在Q1上选择“是”,回答Q2-4,然后意识到Q1实际上应该是“否”,该怎么办

所以我的问题是:1)如何清除模型?2)如何更新视图?因此,如果他们第三次决定Q1实际上应该是“是”,那么Q2-Q4是未选中/清除/空白的

对于1)我刚刚编写了一个简单的“clearAll方法”,如下所示:

function clearAll(arr){
        arr.forEach(function(element){
            if(element!==undefined){
                 element = null; 
            }    
        });
    }
这将清除模型,但不更新视图。如何更新视图以使Q2-4为清除/空/空白

我的想法是更新视图,所以

$scope.$watch( myModel, function(val){
    //set to null or delete?
}

但我不能概括这一点,因此它足够灵活,可以接受数组。任何建议都将不胜感激。谢谢。

对于您的特定问题,我将使用ui路由器,并根据问题解决不同的状态,即
状态。问题
并采用不同的参数,例如,如果您有url
/questions
作为基础intro页面(可能是问题或其他什么),你会有
/questions/1
,它会是第一个问题
/questions/2
会是第二个问题,等等。。。 然后在一些简单服务上保留一个对象列表,即:

let questions = [];
它将在整个应用程序中持续存在,稍后将填充一些对象,如:

{ 
q1: {
  answers: [1,2,3]
},
{
q2: {
  answers: [1,3]
}
您可以在完成后清除它或推送新答案。您还可以在加载状态之前检查特定答案,这将为您提供实际需要的极大灵活性

对于丑陋的解决方案,如果您添加手表组和超时,您的手表可能会工作:

$scope.$watchGroup(arrayOfModels, (newVal, oldVal)=>{
  if(newVal) {
   // now do something you want with that models
   // if they don't apply, try $timeout(()=> $scope.$apply());
  }
})

将函数分配给
$scope.
然后它将触发更改检测,或者调用
$scope.apply()
我们使用的是“controller as”语法,因此我宁愿避免使用scope。即使我想使用$scope.$apply()它抛出与摘要周期相关的错误。此外,不是清除,而是根据条件决定在服务器端或发送过程中保存什么,因此您不会遇到任何此类问题。Angular是围绕作用域构建的。发布控制器的一部分,让我看看发生了什么。如果它抛出,则它正在更新…那么您可能应该d在其他地方查找错误您的
clearAll
函数不“清除模型”。实际上它什么都不做。
element=null
只是将局部变量而不是数组值设置为null。您需要按照
$scope.arrayOfModels=[]的思路做更多的事情
。啊,谢谢你,但我只是在一些现有的遗留代码的基础上进行构建,所以我只需要修复生产中存在的问题。:-/It's event tool thing to right:)用一些解决方法修复问题只会挖更深的洞。如果你需要不同的帮助,你可以发布一些代码,我们可以尝试帮助你。没有太多的c控制器中的ode。只是一个init、save和clearAll,但我同意你的意见。这是monkey补丁。我怀疑正确的方法(考虑到我的时间限制)可能是执行简要讨论过的第二种方法:$scope.$watch(arrayOfModels,function(){//删除适当的模型});或类似的东西。我添加了一些额外的代码作为答案,您可能需要检查,我看到noppa对您的clear函数有一些有用的注释