2017-02-22 3 views
2

誰かがこの質問に私を助けてくれますか? 私は自分の関数の中で変数 "new_name_input"にアクセスする方法を理解しようとしています。目標は選択した名前で変数を設定することだけです。誰かが私にそれを説明するか、または私がどのようにそれを作ることができるかを私が示すことができれば嬉しいです。ng-repeatの外側で変数にアクセスする

以下のコードを参照してください。

var myApp = angular.module('myApp',[]); 
 

 

 
myApp.controller('MyCtrl',['$scope',function($scope){ 
 
    $scope.names= 
 
    [ 
 
    {nome:'Renan'}, 
 
    {nome:'Geraldo'} 
 
    ]; 
 
    $scope.newNames= 
 
    [ 
 
    {nome:'Fernando'}, 
 
    {nome:'José'} 
 
    ]; 
 
    
 
    $scope.transfer=function(novoNome,place){ 
 
    alert(novoNome.nome); 
 
    this.place = novoNome.nome; 
 
    } 
 
    
 
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<body ng-app="myApp"> 
 
<div ng-controller="MyCtrl"> 
 
    
 
<div style='border:1px solid black;display:inline;margin:10px 10px 10px 10px' 
 
ng-repeat='name in names'> 
 
<input type='text' ng-model='new_name_input'/> 
 
<div> 
 
<p ng-click='transfer(new_name,new_name_input)' ng-repeat='new_name in newNames'> 
 
    {{new_name.nome}} 
 
</p> 
 
</div> 
 
</div> 
 

 
</body>

書かれた名前に私をクリックすると、名前がテキストボックスに追加されません。コードからng-repeatを削除せずにどうすればいいのですか?

答えて

1

あなたの質問に完全に従っていますが、これはあなたがしようとしていることですか?基本的には、 "。"が必要です。 ng-modelでは、双方向バインディングがプリミティブで動作するようにしています。これを達成するために新しいオブジェクトを作成するのにng-initを使用しましたが、新しい値をnameオブジェクトに戻すことを意味するのではないでしょうか?その場合は、ng-initを削除し、代わりにnameオブジェクトを転送メソッドに渡すことができます。

var myApp = angular.module('myApp',[]); 
 

 

 
myApp.controller('MyCtrl',['$scope',function($scope){ 
 
    $scope.names= 
 
    [ 
 
    {nome:'Renan'}, 
 
    {nome:'Geraldo'} 
 
    ]; 
 
    $scope.newNames= 
 
    [ 
 
    {nome:'Fernando'}, 
 
    {nome:'José'} 
 
    ]; 
 
    
 
    $scope.transfer=function(novoNome,nameVm){ 
 
    alert(novoNome.nome); 
 
    nameVm.new_name_input= novoNome.nome; 
 
    } 
 
    
 
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<body ng-app="myApp"> 
 
<div ng-controller="MyCtrl"> 
 
    
 
<div style='border:1px solid black;display:inline;margin:10px 10px 10px 10px' 
 
ng-repeat='name in names' ng-init="nameVm = {}"> 
 
<input type='text' ng-model='nameVm.new_name_input'/> 
 
<div> 
 
<p ng-click='transfer(new_name,nameVm)' ng-repeat='new_name in newNames'> 
 
    {{new_name.nome}} 
 
</p> 
 
</div> 
 
</div> 
 

 
</body>

+0

それは私が何をしようとしています正確に何をした、答えアダムをありがとうございました。 –

+0

最初のng-repeatで配列を追加しましたが、うまくいくと思います。今私は、少なくともあなたが思いついた解決策を理解しようとしています。ありがとうございました! –

+0

@RenanCostaSerra、よかった!スタックオーバーフローを歓迎します。ヒントとして、あなたの質問に最もよく答える答えを「受け入れられた」回答としてマークするのが通例です。 – adam0101

関連する問題