将ng-model从视图传递到控制器角度js

时间:2016-01-22 03:15:27

标签: javascript angularjs

我试图在这个形式的角度js中将这样的值从视图传递到控制器。我不希望以这种方式对其进行硬编码。怎么可能以适当的方式完成?



angular.module('user').controller('UsersController', ['$scope', '$stateParams', 'Users',
	function($scope, $stateParams, Orders) {
		$scope.create = function() {
			var user = new Users({
				child: [
					{ columnA: child[0].columnA, columnB: child[0].columnB, columnC: child[0].columnC },
					{ columnB: child[1].columnA, columnB: child[1].columnB, columnC: child[1].columnC },
					...
					{ columnC: child[10].columnA, columnB: child[10].columnB, columnC: child[10].columnC }
				]
			});
		}
	}
});

<form data-ng-submit="create()">
  <input type="text" data-ng-model="child[0].columnA">
  <input type="text" data-ng-model="child[0].columnB">
  <input type="text" data-ng-model="child[0].columnC">

  <input type="text" data-ng-model="child[1].columnA">
  <input type="text" data-ng-model="child[1].columnB">
  <input type="text" data-ng-model="child[1].columnC">
  
  ......

  <input type="text" data-ng-model="child[10].columnA">
  <input type="text" data-ng-model="child[10].columnB">
  <input type="text" data-ng-model="child[10].columnC">
</form>
&#13;
&#13;
&#13;

如果可重复使用的指令可以执行上述功能会更好。

$scope.create = function() {
    child: toJSON(child);
}

function toJSON(var a) {
    //automatically search through the view for ng-model with child[index].columnName and change to the form above.
}

1 个答案:

答案 0 :(得分:2)

我写了一个plunker,它演示了一种方法,可以使用角度练习做类似于你尝试做的事情。

您会注意到我使用ng-repeat消除了视图中的所有重复项,并使child元素的数量动态化。我使用空数组初始化users对象,但您可以使用服务器中的数据轻松初始化对象。

另请注意,对表单的更改立即反映在对象中,这意味着在create()函数中,您可以序列化users对象,而不是表单值。实际上,这可能不是必需的,因为如果使用像$http这样的角度库,则会自动执行与JSON之间的序列化。

$scope.users = {
  child: [{}]
};
$scope.create = function() {
   var data = angular.toJson($scope.users);
   alert(data);
};

$scope.addUser = function() {
  $scope.users.child.push({});
};
<form ng-submit="create()">
  <div ng-repeat="user in users.child">
    <input type="text" ng-model="user.columnA">
    <input type="text" ng-model="user.columnB">
    <input type="text" ng-model="user.columnC">
  </div>
  <button type="submit">Submit</button>
</form>
<button ng-click="addUser()">Add New User</button>

<pre> {{users}}</pre>

然而,主要的理由应该是视图和控制器协同工作以消除重复和不必要的引用。我们不再在HTML中引用child[0],使HTML更具可读性和可维护性。