Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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 Angularjs数据绑定未在控制器中更新_Javascript_Angularjs - Fatal编程技术网

Javascript Angularjs数据绑定未在控制器中更新

Javascript Angularjs数据绑定未在控制器中更新,javascript,angularjs,Javascript,Angularjs,有一个我无法理解的问题。 我复制了下面的代码。 问题是,当我单击一个数字时,它必须更新$scope.screen.operation,但它没有更新它。我是否以错误的方式了解数据绑定 (函数(){ var app=角度模块('electronApp',[]); 应用程序控制器('MainCtrl',函数($scope){ $scope.number={ 一:",, 两个:'' }; $scope.operation=''; $scope.screen={ 操作:$scope.numbers.on

有一个我无法理解的问题。 我复制了下面的代码。 问题是,当我单击一个数字时,它必须更新$scope.screen.operation,但它没有更新它。我是否以错误的方式了解数据绑定

(函数(){
var app=角度模块('electronApp',[]);
应用程序控制器('MainCtrl',函数($scope){
$scope.number={
一:",,
两个:''
};
$scope.operation='';
$scope.screen={
操作:$scope.numbers.one+''+$scope.operation+''+$scope.numbers.two,
结果:“”
};
$scope.number=函数(编号){
如果($scope.operation==''){
$scope.numbers.one=''+$scope.numbers.one+number;
}
console.log($scope.screen.operation);
}
});
})();
屏幕{
边框:1px实心#bbb;
背景色:#fafafa;
边界半径:2px;
高度:200px;
边缘顶部:15px;
填充:15px;
位置:相对位置;
}
.屏幕.操作列表{
字体大小:16px;
字体大小:粗体;
}
.屏幕.结果{
字体大小:24px;
字体大小:粗体;
位置:绝对位置;
右:15px;
底部:15px;
左:15px;
文本对齐:右对齐;
}
.按钮盒{
边缘顶部:5px;
}
.按钮框.行分区{
填充物:5px 5px;
}
.按钮框.行分区:第一个孩子{
左侧填充:0;
}
.按钮框.行分区:最后一个子项{
右边填充:0;
}
.按钮框.行div按钮{
宽度:100%;
高度:40px;
字体大小:16px;
字体大小:粗体;
填充:0;
}

你好,世界!
{{screen.result}
1.
2.
3.
+
4.
5.
6.
-
7.
8.
9
*
0
Tmzl
Sil
/

$scope.screen.operation将成为一个未绑定数据的字符串

不完全确定我们试图实现什么,但可能的解决方案可能涉及一个函数,该函数返回您想要的操作字符串,并调用:

$scope.makeOperation = function () {
  return $scope.numbers.one + ' ' + $scope.operation + ' ' + $scope.numbers.two;
}


看起来您希望在中使用
$scope.screen.operation

$scope.screen = {
    operation: $scope.numbers.one +' '+ $scope.operation +' '+ $scope.numbers.two,
    result: ''
}; 
将自动重新评估,因为作业右侧的术语已更新

AngularJS数据绑定不是这样工作的<代码>$scope.screen.operation
将根据右侧的术语当时的值计算一次(当控制器初始化时)

然后,您可以通过UI(双向数据绑定)或控制器逻辑(例如)显式更新
$scope.screen.operation

您可以在
$scope.number
函数中显式更新
$scope.screen.operation

使用
$watch
检测
$scope.numbers.one
上的更改(该更改此时发生在您的
$scope.numbers
功能中)


您可能希望对
$scope.numbers.two执行相同的操作。您是正确的,但是您可以提供一个建议的解决方案,而不仅仅是指出错误?添加了一个可能的解决方案。还没有测试过,但类似的东西。谢谢你的回答,你写了一个很好的解决方案,我从@Quiriacus的回答中找到了问题的症结所在。谢谢awnser,我现在在angular code端得到了逻辑数据绑定,多亏了你。
$scope.screen = {
    operation: $scope.numbers.one +' '+ $scope.operation +' '+ $scope.numbers.two,
    result: ''
}; 
$scope.$watch('numbers.one', function(newVal, oldVal) {
    $scope.screen.operation = newVal + ' ' + $scope.operation + ' ' + $scope.numbers.two;
}