Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.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 Angular的NgClick具有过时的作用域_Javascript_Angularjs - Fatal编程技术网

Javascript Angular的NgClick具有过时的作用域

Javascript Angular的NgClick具有过时的作用域,javascript,angularjs,Javascript,Angularjs,我正在经历一种奇怪的行为,但我不知道这是谁的错 我在$scope中有三个变量,用户可以更改它们。它们通过ng模型绑定到选定对象 如果我选择一个新的分钟值,然后单击按钮,$scope函数将看到旧值,而不是新值: $scope.add_value = function() { console.log("new_minute: " + $scope.new_minute.val); } 假设我选择了03,然后点击按钮。控制台显示新的\u分钟:0 但是,如果我修改代码: <button

我正在经历一种奇怪的行为,但我不知道这是谁的错

我在$scope中有三个变量,用户可以更改它们。它们通过ng模型绑定到选定对象

如果我选择一个新的分钟值,然后单击按钮,$scope函数将看到旧值,而不是新值:

$scope.add_value = function()
{
    console.log("new_minute: " + $scope.new_minute.val);
}
假设我选择了03,然后点击按钮。控制台显示新的\u分钟:0

但是,如果我修改代码:

<button ng-click="add_value(new_minute.val)">Add vaue</button>
那么传递给add_value的值总是正确的。如果打开inspect控制台并检查$scope.new_minute.val的值,则$scope.new_minute.val与局部变量new_minute不同

我已经准备好了我的代码的基本结构:


如果一切都按预期进行,我真的无法重现这种行为。有人知道可能发生了什么吗?

分享您所有的视图和控制器代码可能会有帮助,因为fiddle与当前代码按预期工作,那么错误可能在其他地方。我很乐意,但这不是我的私人代码,这是我公司的一个项目,我没有显示所有代码的权限,而且涉及到很多代码。我会尽量压缩代码,然后发布一个新的提琴。不过,这将花费我几个小时的时间:我想知道是否存在$scope问题——我在一些父级和子级$scope中遇到了类似的问题。您在这里处理的$scope是否在另一个具有类似命名变量的$scope中?此后,我不再使用$scope,而是几乎完全使用ctrl作为语法—这使它更加清晰,并帮助解决了这些类型的问题。我认为实际上有不同的范围。我将debug$id={{$id}}放在视图中,视图中的id与执行console.log$scope.$id时的$scope.$id不同,它位于ngClick处理程序中。这似乎很奇怪,其他一切似乎都很好。@NathanBeck你给了我一个好主意!在以前的$scope.add_value函数中,我将行从$scope.new_minute.val更改为this.new_minute.val,并使用该行获得正确的新值。我认为这可能是作用域的一些问题,因为我使用了许多嵌套指令,有些指令带有transclude:true。有趣的是,到目前为止,我还没有遇到任何类似的错误,即使我在同一个地方初始化了$scope变量。我不能在这里发布我的原始代码,但我将尝试编写一个具有相同结构的小提琴,看看是否可以复制它。
<button ng-click="add_value()">Add value</button>
$scope.add_value = function()
{
    console.log("new_minute: " + $scope.new_minute.val);
}
<button ng-click="add_value(new_minute.val)">Add vaue</button>
$scope.add_value = function(new_minute)
{
    console.log("new_minute: " + new_minute);
}