【问题标题】:Angular: update scope inside scopeAngular:更新范围内的范围
【发布时间】:2015-08-18 19:42:18
【问题描述】:

我有一个有 2 个作用域的控制器:

app.controller('search', function($scope) {
    $scope.value1 = '';
    $scope.value2 = 'Some text' + $scope.value1;
}

还有一个输入字段:

<input type="text" ng-model="value1">

当我使用输入字段更改 value1 时(有效), value2 不会更新。我怎样才能做到这一点?

【问题讨论】:

  • 只有对象在 JS 中通过引用传递 - 而不是原语。

标签: javascript angularjs angularjs-scope angularjs-ng-model angularjs-ng-change


【解决方案1】:

您可以在声明对象时遵循点规则。那会给你prototypal inheritance的东西。 param1param2 都将引用对象的同一副本。这样更新一个会自动更新另一个。

标记

<input type="text" ng-model="param1.value">
<input type="text" ng-model="param2.value">

控制器

app.controller('search', function($scope) {
    $scope.param1 = {value : ''};
    $scope.param2 = $scope.param1;
}

Demo Plunkr

更新

如果您想将这些变量保持为原始变量,那么您应该在某些事件上更新它们,例如这里您可以使用 ng-change 指令来完成

标记

<input type="text" ng-model="value1" ng-change="value2 = value1 + ' something'">

或者只是您可以将内联 html 代码移动到您的控制器函数中以使其可测试。

标记

<input type="text" ng-model="value1" ng-change="changedValue()">

代码

$scope.changedValue = function(){
    $scope.value2 = $scope.value1 + ' something' 
}

【讨论】:

  • 感谢您的回答 Pankaj!我忘了提到这两个范围不应该完全相同。我已经编辑了我的问题。当我在您的示例中更改它时,它似乎不起作用。
  • @Jarno 两者都用作输入元素吗?
  • 不只有 value1 链接到输入。
  • @Jarno 很高兴为您提供帮助..Thnaks :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多