Javascript 除非调用函数,否则在视图中设置$scope变量无效

Javascript 除非调用函数,否则在视图中设置$scope变量无效,javascript,angularjs,Javascript,Angularjs,如果您有一个html文件,其中您可以在单击时切换布尔值,有时我可以直接在视图中进行切换,有时我必须在控制器中创建一个函数来切换布尔值。为什么这有时有效,但不是一直有效 只是有时候有用 <div ng-click="myVar = !myVar">Toggle</div> 切换 总是有用的 <div ng-click="updateVar();">Toggle</div> ... $scope.updateVar = function() {

如果您有一个html文件,其中您可以在单击时切换布尔值,有时我可以直接在视图中进行切换,有时我必须在控制器中创建一个函数来切换布尔值。为什么这有时有效,但不是一直有效

只是有时候有用

<div ng-click="myVar = !myVar">Toggle</div>
切换
总是有用的

<div ng-click="updateVar();">Toggle</div>
...
$scope.updateVar = function() {
  $scope.myVar = !$scope.myVar;
};
切换
...
$scope.updateVar=函数(){
$scope.myVar=!$scope.myVar;
};

如果最初未设置$scope.myVar,则myVar和$scope.myVar不是同一个变量。使用

<div ng-click="$scope.myVar = !$scope.myVar">


…以确保始终访问同一个变量。

看起来很好-您能提供一个它不起作用的示例吗?我还没有能够为此复制一个简单的测试用例。但我在过去多次遇到过这个问题,不知道这是不是我犯的一个常见错误,或者是什么。这真的很奇怪,我想你可以重现这个问题,一旦你在不同的范围之间切换,我觉得这就像是一个角度错误。我有同样的问题。视图中的所有范围变量都可用,不带“$scope”。这是基本的角度知识。那么为什么不起作用,但是起作用了?因为您最初从未设置
$scope.myVar
,所以如果您对未定义的对象执行“not”操作,它仍然未定义。我们知道海报最初设置了$scope.myVar吗???因此,不是从我们掌握的信息来看,这是一个有效的答案,可以确保无论操作顺序如何,它都能正常工作。更新后的答案更加清晰。您的答案仍然错误。实际上,您正在范围上创建一个名为
$scope
的新属性,其中包含一个
myVar
字段。正如@Catfish所说,在视图中不使用
$scope
,因为视图本身已经绑定到范围。