angular数组没有传递给主控制器表单对象

时间:2016-02-11 20:58:15

标签: javascript arrays angularjs

我有一个EventController并使用EventService保存到localStorage。

#if 0

   blah blah 

#if 0
   blah blah 

#endif

   blah blah 

#endif

查看所有活动:

vm.event = event;
    function event() {
        vm.dataLoading = true;
        EventService.Create(vm.events)  //save using ( api/events/ + id )
            .then(function (response) {
                if (response.success) {
                    FlashService.Success('Event created successful', true);
                    $location.path('/events');
                } else {
                    FlashService.Error(response.message);
                    vm.dataLoading = false;
                }
            });
    }

我的问题是我尝试添加带有数组的访客列表

  <td>{{events.eventType}} </td>
  <td>{{events.eventName}}</td>
  ...

HTML

        vm.guests = [];

        vm.addGuest = function () {
            vm.guests.push(vm.newGuest);
        }

        vm.removeGuest = function (guest) {
            var index = vm.guests.indexOf(guest);
            vm.guests.splice(index, 1);
        }

我可以从单个输入/按钮

向字符串添加字符串

但是,数组不会传递给事件对象。

  <input type="text" name="guests" id="guests" class="form-control" ng-model="vm.newGuest"  />
  <button type="submit" ng-click="vm.addGuest()" class="btn btn-primary">Add Guest</button>
    <div ng-repeat="guest in vm.guests track by $index">
     {{guest}}

我的目标是将数组添加到对象

{
  "eventType": "Birthday",
  "eventName": "Part at Lake Lettuce"
}
[
  "Joe",
  "Tom"
]

1 个答案:

答案 0 :(得分:1)

您需要设置活动的guests属性。您可能希望在event()函数中执行此操作。

    function event() {
        vm.dataLoading = true;
        vm.events.guests = vm.guests;
        EventService.Create(vm.events)
            .then(function (response) {
                if (response.success) {
                    FlashService.Success('Event created successful', true);
                    $location.path('/events');
                } else {
                    FlashService.Error(response.message);
                    vm.dataLoading = false;
                }
            });
    }

在这种情况下,您必须初始化来宾数组。

vm.guests = vm.events.guests || [];

或者,您可以让您的来宾修改器功能引用事件

    vm.addGuest = function () {
        vm.events.guests.push(vm.newGuest);
    }

    vm.removeGuest = function (guest) {
        var index = vm.events.guests.indexOf(guest);
        vm.events.guests.splice(index, 1);
    }

另外,我发现事件vs事件命名令人困惑。在EventController中,我建议将vm.event()函数重命名为vm.createEvent(),然后仅events调用event模型。