Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.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
我的控制器中的函数工作,但不更新视图(Angularjs)_Angularjs_View_Controller - Fatal编程技术网

我的控制器中的函数工作,但不更新视图(Angularjs)

我的控制器中的函数工作,但不更新视图(Angularjs),angularjs,view,controller,Angularjs,View,Controller,我有一些字段,它们可以编辑。用户可以使用“取消”按钮取消编辑模式: <button ng-click="cancelEdit();" ng-show="editable"> <i class="fa fa-remove"></i> Cancel </button> 在这个函数中,我只想将编辑模式的布尔变量设置为false,并将输入值重新设置为编辑模式之前的默认值。调用此函数后,将更新控制器的值,但不在我的视图中: <button n

我有一些字段,它们可以编辑。用户可以使用“取消”按钮取消编辑模式:

<button ng-click="cancelEdit();" ng-show="editable">
    <i class="fa fa-remove"></i> Cancel
</button>
在这个函数中,我只想将编辑模式的布尔变量设置为false,并将输入值重新设置为编辑模式之前的默认值。调用此函数后,将更新控制器的值,但不在我的视图中:

<button ng-click="editable=true;" ng-show="!editable">
    <i class="fa fa-edit"></i> Edit
</button>
当变量“可编辑”设置为false时,将显示此按钮。因此,当我点击cancel按钮时,理论上,必须显示按钮编辑,并更新我的输入。为什么不是这样?

原语是不可变的,即不能通过调用其上的函数来更改其值

$scope.editable是一个基本布尔变量。这就是视图无法更新的原因。它的值仅在函数关闭时更改

要在视图中应用它,应将其更改为非基本值。如果将其设置为对象的属性,则可以执行此操作

例如

然后玩那个东西。就你而言:

取消按钮:

<button ng-click="cancelEdit();" ng-show="isEditable.value">
    <i class="fa fa-remove"></i> Cancel
</button>

感谢Korte对布尔变量的回答。 为了完成,关于输入,我找到了我问题的答案。只需在控制器中声明:var vm=this

简单地说,在输入的模型中,写入:ng model=vm.jobCommentsInput


我认为输入被视为布尔变量,它们必须是对象。

您能说明如何绑定$scope.jobNameInput和视图中的其他值吗?$scope.jobToView.name的价值是什么?如果你能做一个剪接或plnkr,那就太好了。因此,我们可以更好地帮助您。mmm请尝试设置ng click=editable=true;不在按钮中,但具有功能。。因此,ng click=setEditTrue,然后单击$scope.setEditTrue=function{$scope.editable=true;}尝试将可编辑变量替换为对象的属性,而不是$scope的属性,例如:buttonEditable={value:true};然后在您的htlml:ng click=buttonEditable.value=true中,当我尝试执行plunker时,它成功了。我认为这是一个与以下事实相关的问题:只有当用户在使用ng类checked/之前单击按钮时,我才会显示这些输入!选中的。输入示例:谢谢!我不知道基元类型是不可更新的。在投入方面,你有什么想法吗?因为,在本例中,我使用jobToView对象。您可以遵循相同的策略。e、 作业={name:,优先级:,注释:}。然后在视图中使用此对象属性。我已经在视图中使用了我的jobToView对象。但是当我单步执行cancelEdit函数时,输入的值已经等于默认值。好像他没有看到我在编辑时所做的更改。当显示器通过我的功能后,它保留了我所做的修改。
$scope.isEditable = {
  value:false
}
<button ng-click="cancelEdit();" ng-show="isEditable.value">
    <i class="fa fa-remove"></i> Cancel
</button>
<button ng-click="isEditable.value=true;" ng-show="!isEditable.value">
    <i class="fa fa-edit"></i> Edit
</button>
$scope.cancelEdit = function(){
    $scope.isEditable.value = false;
    $scope.jobNameInput = $scope.jobToView.name;
    $scope.selectedPriority = $scope.jobToView.priority;
    $scope.jobCommentsInput = $scope.jobToView.comments;
}