AngularJS向关联集合添加2个属性

时间:2013-03-14 18:52:57

标签: angularjs

1。我有一个Truck类,它有一个名为AxleTypes的集合,带有以下标记:

public class AxleType : Entity
{
    public string Description { get; set; }
    public string Type { get; set; }
}

2。我的角形包括以下内容(为了保持尽可能短,我省略了窗体的其他轴类型,我使用$ parent,因为这是一个模板,并且在主窗体上通过ng-include):

<label for="frontAxles">Front Axle: </label>
<input ng-model="$parent.frontAxleType" type="hidden" value="Front">
<select ng-model="$parent.selectedFrontAxle" ng-options="axleType.Description for axleType in axleTypes">
    <option value="" selected>Select Axle Type ..</option>  
</select>

第3。主要形式通过卡车控制器插入新卡车,因此在卡车控制器中

  a. I instantiate an instance of the AxleTypes collection so the form is populates the select w/axle types.
  b. I instantiate an instance of AxleType to pass the selected data from the form.
  c. I pass the respective ng-models on the form to the AxleType variable.
  d. I add that AxleType variable to the Truck's AxleTypes collection.

  a: if ($scope.axleTypes == undefined || !($scope.axleTypes.length > 0)) 
       { $scope.axleTypes = API.GetAxleTypes(); }

  b: $scope.axleType = {};

  c: var frontAxle = $scope.axleType;
         frontAxle.Description = $scope.selectedFrontAxle;
         frontAxle.Type = $scope.frontAxleType;

  d: newTruck.AxleTypes = [
        angular.copy(frontAxle)
    ];

调试时,这是最终结果:

enter image description here

为了尽量缩短,我没有说明上面选择的第二轴类型。但正如您所看到的,服务器正在拾取两种轴类型,但每种类型的两种属性[Type&amp;说明]为空。 有没有人有任何建议?

在console.log中,两个值均为“未定义”。

一个有趣的观察:

当我对TruckCtrl中的值进行硬编码时,一切正常:

    frontAxle.Description = 'Some Front Value';
    frontAxle.Type = 'Front';
    rearAxle.Description = 'Some Rear Value';
    rearAxle.Type = 'Rear';

    newTruck.AxleTypes = [
        angular.copy(frontAxle),
        angular.copy(rearAxle)
    ];

这将导致某人认为问题在于轴模板上的ng-model。但是,当我只有一个属性,即Description,而不是在服务器类AxleType中输入时,只是通过以下方式添加了select的描述:

    newTruck.AxleTypes = [
        angular.copy($scope.selectedFrontAxle),
        angular.copy($scope.selectedRearAxle)
    ];

传递的值。非常混乱。

1 个答案:

答案 0 :(得分:1)

已解决!!!

有很多我想对那些没有输入来解决这个问题的40个奇怪的眼球说,Stewie,嗯,我们知道Stewie是什么。但我不会。相反,我向那些遇到同样问题的人提供帮助。

好的,解决方案。

问题#1:Angular不接受html输入中的默认值。

我很困惑,为什么我有这样的输入:

<input ng-model="$parent.selectedRearType" type="hidden" value="Front">

然而有角度的说它没有任何价值。

解决问题#1:

您需要在控制器中初始化以下内容:

    $scope.selectedFrontType = 'Front';
    $scope.selectedRearType = 'Rear';

问题#2:如何传递集合中多个属性的值?

尽管这种情况真实存在,但令人不安的是有关于此事的ZERO文件。

问题解决方案#2:

在我的html中,我有这个选择语句:

  <select ng-model="$parent.selectedFrontAxle" ng-options="axleType.Description for axleType in axleTypes">

我误以为这个ng-model是 STRICTLY 类AxleType的Description属性(参见我上面的类模型)。 这是一个巨大的错误,但事实并非如此。那个ng-model不是该类的Description属性,而是整个类本身。因此,在检查select的ng-model时,即使只提供了Description属性,也要完全知道它是AxleType类。所以ng-model给我的是在用户做出选择后我的控制器中的返回值:

AxleType class =&gt; Description =“无论选择何种人”,Type =“”

在这种情况下,我需要填充角度没有的空白,即在这种情况下,Type属性。

以下是整个解决方案:

    // beginning of controller when it initializes
    $scope.selectedFrontType = 'Front';
    $scope.selectedRearType = 'Rear';    

   // $scope.axleType = {}; -> NOT NEEDED

    // in the save method    
    // axles
    var frontAxle = $scope.selectedFrontAxle;
    frontAxle.Type = $scope.selectedFrontType;

    var rearAxle = $scope.selectedRearAxle;
    rearAxle.Type = $scope.selectedRearType;

    newTruck.AxleTypes = [
        angular.copy(frontAxle),
        angular.copy(rearAxle)
    ];

enter image description here

我希望我帮助过某人!