AngularJS:One'部分形式'用于创建和更新文章

时间:2015-04-17 23:04:23

标签: javascript angularjs forms angularjs-controller

以一个文本输入为例,我们采用一个简单的形式。我希望它是部分的,所以我可以添加其他输入,并为创建和更新艺术家提供一个表单。

部分

<input name="name" type="text" data-ng-model="artist.name" id="name">

创建表单

<section data-ng-controller="ArtistsController">
  <form name="artistForm" class="form-horizontal" data-ng-submit="create()" novalidate>
    <ng-include src="'/modules/artists/views/partials/form-artist.client.view.html'"></ng-include>
  </form>
</section>

编辑(或更新)表格

<section data-ng-controller="ArtistsController" data-ng-init="findOne()">
  <form name="artistForm" class="form-horizontal" data-ng-submit="update(artistForm.$valid)" novalidate>
    <ng-include src="'/modules/artists/views/partials/form-artist.client.view.html'"></ng-include>
  </form>
</section>

在我的客户端控制器中,我可以创建一个艺术家:

$scope.create = function() {
  var artist = new Artists({
    name: this.name
  });
  artist.$save(function(response) {
    //success!
  }, function(errorResponse) {
    $scope.error = errorResponse.data.message;
  });
}

我可以更新艺术家的名字:

$scope.update = function() {
  var artist = $scope.artist;
  artist.$update(function() {
    //success!
  }, function(errorResponse) {
    $scope.error = errorResponse.data.message;
  });
};

问题是当我创建艺术家时,this.name未定义。如果我将parial中的data-ng-model更改为data-ng-model="name",我可以正确创建艺术家,但输入不会在更新表单中填写名称。

有关如何正确合并两个表单的任何想法吗?

2 个答案:

答案 0 :(得分:2)

该值实际存储在范围中的artistForm对象中。

你只需要改变:

name: this.name 

name: $scope.artistForm.name.$viewValue

PS:console.log($ scope)对调查很有帮助

答案 1 :(得分:0)

我可以看到,在创建的情况下,您尚未将艺术家对象添加到范围。你需要将艺术家添加到$ scope。 在部分你应该使用artist.name。