2016-10-13 7 views
1

私はアプリケーションページに非常に大きなフォームを持っていて、JSON変数を持っています。そこにはすべてのフォームデータが保存されていて、私はcontrollerAs式を使用しています。HTMLブロックの範囲をAngularで定義する方法は?

<form> 
    <input type="text" data-ng-model="ctrl.myJSON.name"/> 
    <input type="text" data-ng-model="ctrl.myJSON.old"/> 
    <input type="text" data-ng-model="ctrl.myJSON.address"/> 
    <input type="text" data-ng-model="ctrl.myJSON.email"/> 
    <input type="text" data-ng-model="ctrl.myJSON.phone"/> 
    <!-- and many more... --> 
</form> 

はどのように私は不要のため、すべてのフィールドに、この変数の多くの時間を繰り返し、フォームのスコープとしてmyJSONを定義することができますか?

答えて

1

角度拡張を使用してjsonデータを$ scopeにコピーすることができます。そして、あなたが直接使用することができます。その後

.controller('YourController', function($scope) { 

    $scope.readData = function() { 
     // replace with your read data function 
     var myJSON = { name: 'test' }; 
     angular.extend($scope, myJSON); 
    } 

} 

を、変数が直接動作します:

ラップ
<input type="text" data-ng-model="name"/> 
+0

私はこの方法で多分汚い範囲を考えると、HTMLブロックの別の部分に溢れます – Lai32290

+0

Wそう、JSONの内容が私に変わってしまえば、それは少し侵略的だ。 angle.extend(this、myJSON)、または制限されたプロパティを拡張することができます:angular.extend($ scope、{name:myJSON.name、old:myJSON.old}) –

1

フォーム別の、専用コントローラFormController内側とmyJsonキーと値のペアをコピーその$scope

This is possibleスコープの継承/ネストされたスコープを使用して、Angularのそれ以降のバージョンになります。

HTML

​​

はJavaScript

var myApp = angular.module('myApp', []); 
myApp.controller('MainController', ['$scope', function($scope) { 
    // other logic goes here 
}]); 
myApp.controller('FormController', ['$scope', function($scope) { 
    // Initialize myJson by loading its data from a service 

    angular.extend($scope, myJson); 
}]); 

JSFiddle:https://jsfiddle.net/206redxb/5

関連する問題