基本范围连接
Basic Scope Connection
我几天前才开始 AngularJS,我读到只要链接元素的值发生变化,范围就会立即更新。我的控制器有这个 HTML 代码:
<div ng-controller="lyricsMod">
<textarea ng-model="valueB"></textarea>
{{valueA}}
还有我的 AngularJS 控制器:
myMod.controller('lyricsMod', function($scope) {
$scope.valueA = $scope.valueB;
});
但是,这没有任何输出。但是,将 HTML 代码更改为:
<div ng-controller="lyricsMod">
<textarea ng-model="valueA"></textarea>
{{valueA}}
产生想要的结果。很确定它与 AngularJS 无关,它只是将 HTML 中的两件事联系在一起。我不明白,如果范围立即更新,为什么这不起作用?
scopes are immediately updated whenever the value of their linked
element changes
是,但仅使用 ng-model
绑定范围变量。在您的第一个示例中,ValueB
使用 ng-model
而不是 valueA
进行绑定。如果您想在另一个范围变量发生变化时更改另一个范围变量的值(并且使用 ng-model 进行绑定)。使用 ng-change
指令。
<div ng-controller="lyricsMod">
<textarea ng-model="valueB" ng-change="changeA()"></textarea>
{{valueA}}
$scope.changeA = function () {
$scope.valueA = $scope.valueB;
}
试试看:
如果你想在改变其他范围变量时改变范围变量,你需要使用 $watch
</p>
<pre><code>myMod.controller('lyricsMod', function ($scope) {
$scope.$watch('valueB',function(){
$scope.valueA=$scope.valueB;
});
$scope.valueA=$scope.valueB;
});
我几天前才开始 AngularJS,我读到只要链接元素的值发生变化,范围就会立即更新。我的控制器有这个 HTML 代码:
<div ng-controller="lyricsMod">
<textarea ng-model="valueB"></textarea>
{{valueA}}
还有我的 AngularJS 控制器:
myMod.controller('lyricsMod', function($scope) {
$scope.valueA = $scope.valueB;
});
但是,这没有任何输出。但是,将 HTML 代码更改为:
<div ng-controller="lyricsMod">
<textarea ng-model="valueA"></textarea>
{{valueA}}
产生想要的结果。很确定它与 AngularJS 无关,它只是将 HTML 中的两件事联系在一起。我不明白,如果范围立即更新,为什么这不起作用?
scopes are immediately updated whenever the value of their linked element changes
是,但仅使用 ng-model
绑定范围变量。在您的第一个示例中,ValueB
使用 ng-model
而不是 valueA
进行绑定。如果您想在另一个范围变量发生变化时更改另一个范围变量的值(并且使用 ng-model 进行绑定)。使用 ng-change
指令。
<div ng-controller="lyricsMod">
<textarea ng-model="valueB" ng-change="changeA()"></textarea>
{{valueA}}
$scope.changeA = function () {
$scope.valueA = $scope.valueB;
}
试试看:
如果你想在改变其他范围变量时改变范围变量,你需要使用 $watch
</p>
<pre><code>myMod.controller('lyricsMod', function ($scope) {
$scope.$watch('valueB',function(){
$scope.valueA=$scope.valueB;
});
$scope.valueA=$scope.valueB;
});