AngularJs:使用ng-value复制数据,但模型不会更新

时间:2015-09-15 08:48:59

标签: angularjs

我在使用ng-value更新或将值或数据分配到模型时遇到问题。

我想将DisplayName模型中的任何值复制到CopyDisplayName并使用下面的指令我能够做到这一点,但问题是模型CopyDisplayName在我提交更改时没有任何值。只有我手动输入它才能有。

<input type="Text" ng-model="DisplayName" ng-disabled="true" />
<input type="Text" ng-model="CopyDisplayName" ng-value="DisplayName" />

忘记包括DisplayName被禁用..数据将来自服务电话。

5 个答案:

答案 0 :(得分:2)

  

<强> ngValue

     

将给定表达式绑定到或输入[radio]的值,以便在选择元素时,将该元素的ngModel设置为绑定值。

您可以查看此documentation

所以基本上,你现在正在做的那个不起作用。

您可以在角度控制器中执行此操作:

$scope.copyValue = function () {
    $scope.copyDisplayName = $scope.displayName; 
}

在html中:

<input type="text" ng-model="displayName" ng-change="copyValue()" />

答案 1 :(得分:0)

只需将一个变量分配给另一个变量:

// in the controller
$scope.CopyDisplayName = $scope.DisplayName;

如果您需要让它们保持同步(并且由于某种原因,您不想只使用相同的变量),那么您可以通过ng-change更新它们:

<input type="Text" ng-model="DisplayName" ng-change="CopyDisplayName = DisplayName" />

ng-value(或ng-checked)等指令只能切换DOM中的属性 - 它们不会改变视图模型。

答案 2 :(得分:0)

您可以在$watch上添加DisplayName作为:

$scope.$watch('DisplayName',function(newValue, oldValue){
   console.log(newValue +":"+oldValue)
   $scope.CopyDisplayName = newValue;
});

答案 3 :(得分:0)

要更新副本,您需要通过引用复制值。为此,您需要将displayName包装到对象: $scope.model = {DisplayName: 'val'};并复制一份:$scope.modelCopy = $scope.model;

 <input type="Text" ng-model="model.DisplayName" ng-disabled="true" />
 <input type="Text" ng-model="modelCopy.DisplayName" ng-value="DisplayName" />

JSFiddle

答案 4 :(得分:0)

你可以在控制器中做的是观察模型并在每次更改时复制该值($ watch会为你做到这一点)你不需要对HTML进行ngChange。

$scope.$watch('displayName', function() {
      $scope.copyDisplayName = $scope.displayName; 
});