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)
];
调试时,这是最终结果:
为了尽量缩短,我没有说明上面选择的第二轴类型。但正如您所看到的,服务器正在拾取两种轴类型,但每种类型的两种属性[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)
];
传递的值。非常混乱。
答案 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)
];
我希望我帮助过某人!