Javascript 何时在控制器中使用$scope.$watch

Javascript 何时在控制器中使用$scope.$watch,javascript,angularjs,Javascript,Angularjs,我知道指令中应该使用$scope.$watch。但是,我相信我有一个特殊情况,$scope.$watch可能在控制器中是必需的。控制器上有一个日期变量,格式如下: $scope.myDateParts = {year: 2014, month: 1, day: 1}; 我需要另一个变量来表示日期myDateParts。因此,如果上述变量改变,日期也需要改变: $scope.myDate = new Date($scope.myDateParts.year, $scope.myDateParts

我知道指令中应该使用$scope.$watch。但是,我相信我有一个特殊情况,$scope.$watch可能在控制器中是必需的。控制器上有一个日期变量,格式如下:

$scope.myDateParts = {year: 2014, month: 1, day: 1};
我需要另一个变量来表示日期
myDateParts
。因此,如果上述变量改变,日期也需要改变:

$scope.myDate = new Date($scope.myDateParts.year, $scope.myDateParts.month, $scope.myDateParts.day);

myDateParts和myDate需要保持同步。我最初的解决方案是在myDateParts更改时手动更改myDate。但是,
myDateParts
可以更改的地方很多,很难跟踪它更改的每个地方。为了解决这个问题,我想在myDateParts上使用$scope.$watch。我不确定这是否是解决这个问题的正确方法。我的问题是-以这种方式使用$scope.$watch是否正确?如果没有,你能推荐一种适合这种情况的技术吗?

它似乎是一种很好的使用方法。由于
new Date()
只会构造一个对象一次,因此在您更新前面提到的
$scope.myDateParts
时,它不会自动更新

你可以这样做:

$scope.$watch('myDateParts', function() {
    // create new date 
});

看起来它可能是一个很好的用途。由于
new Date()
只会构造一个对象一次,因此在您更新前面提到的
$scope.myDateParts
时,它不会自动更新

你可以这样做:

$scope.$watch('myDateParts', function() {
    // create new date 
});

看起来它可能是一个很好的用途。由于
new Date()
只会构造一个对象一次,因此在您更新前面提到的
$scope.myDateParts
时,它不会自动更新

你可以这样做:

$scope.$watch('myDateParts', function() {
    // create new date 
});

看起来它可能是一个很好的用途。由于
new Date()
只会构造一个对象一次,因此在您更新前面提到的
$scope.myDateParts
时,它不会自动更新

你可以这样做:

$scope.$watch('myDateParts', function() {
    // create new date 
});

是的,您可以在myDateParts上使用watch,在controller中使用watch没有问题,但它会影响应用程序的性能,对于一块手表来说,并没有这样的性能问题

是的,您可以在myDateParts上使用watch,在controller中使用watch没有问题,但它会影响应用程序的性能,因为一块手表不会出现这样的性能问题

是的,您可以在myDateParts上使用watch,在controller中使用watch没有问题,但它会影响应用程序的性能,因为一块手表不会出现这样的性能问题

是的,您可以在myDateParts上使用watch,在controller中使用watch没有问题,但它会影响应用程序的性能,因为一块手表不会出现这样的性能问题

你不能只用一个方法而不是一个属性吗?ie拥有
$scope.myDate=funtion(){返回新日期(…)}
?只要不在范围之外更新
$scope.myDateParts
,myDate()将被再次调用,并返回新结果。如果将方法绑定到ng show,则将在初始化其任何局部($scope)变量之前调用它。我总是可以检查局部变量是否有值,但我认为它不会通过代码检查,因为如果局部变量没有初始化,我必须返回NULL。你不能只使用方法而不是属性吗?ie拥有
$scope.myDate=funtion(){返回新日期(…)}
?只要不在范围之外更新
$scope.myDateParts
,myDate()将被再次调用,并返回新结果。如果将方法绑定到ng show,则将在初始化其任何局部($scope)变量之前调用它。我总是可以检查局部变量是否有值,但我认为它不会通过代码检查,因为如果局部变量没有初始化,我必须返回NULL。你不能只使用方法而不是属性吗?ie拥有
$scope.myDate=funtion(){返回新日期(…)}
?只要不在范围之外更新
$scope.myDateParts
,myDate()将被再次调用,并返回新结果。如果将方法绑定到ng show,则将在初始化其任何局部($scope)变量之前调用它。我总是可以检查局部变量是否有值,但我认为它不会通过代码检查,因为如果局部变量没有初始化,我必须返回NULL。你不能只使用方法而不是属性吗?ie拥有
$scope.myDate=funtion(){返回新日期(…)}
?只要不在范围之外更新
$scope.myDateParts
,myDate()将被再次调用,并返回新结果。如果将方法绑定到ng show,则将在初始化其任何局部($scope)变量之前调用它。我总是可以检查局部变量是否有值,但我认为它不会通过代码检查,因为如果局部变量没有初始化,我必须返回NULL。我不会在控制器中使用$watch,这会使控制器难以进行单元测试。这是一个比性能更大的问题。我不会在控制器中使用$watch,这会使控制器很难进行单元测试。这是一个比性能更大的问题。我不会在控制器中使用$watch,这会使控制器很难进行单元测试。这是一个比性能更大的问题。我不会在控制器中使用$watch,这会使控制器很难进行单元测试。这是一个比性能更大的问题。