角度 - ng-change的麻烦

时间:2016-01-15 02:58:12

标签: angularjs

我还是Angular的新手,如果该选项是数组中唯一的选项,我在设置默认选择选项时遇到问题。具体发生的是,选择确实是默认的,但是,运输成本没有计算。它仅计算用户是否从下拉列表中选择它。我认为问题可能是因为选择元素的ng-change,但我不确定。

在我的HTML中:

<select class="form-control" ng-change="updateShipper()" name="shipMethod"
ng-model="currentOrder.LineItems[0].ShipperName"
ng-show="user.ShipMethod.ShipperSelectionType == 'UserDropDown'"
ng-options="shipper.Name as (shipper.Name + ' ' + (shipper.ShippingRate.Price | currency | xlat)) for shipper in shippers"
ng-required="!currentOrder.IsMultipleShip() && user.ShipMethod != null" >
<option value=""></option>

在我的控制器中:

    scope.$watch('shippers', function(val) {
            if(angular.isDefined(val)){
                $timeout(function() {
                    if(val.length === 1){
                        scope.currentOrder.LineItems[0].ShipperName = val[0].Name;
                    }
                }, 0); 
            }
        });



    $scope.updateShipper = function(li) {
            $scope.shippingUpdatingIndicator = true;
            $scope.shippingFetchIndicator = true;
            if (!li) { // at the order level
                angular.forEach($scope.shippers, function(s) {
                    if (s.Name == $scope.currentOrder.LineItems[0].ShipperName)
                        $scope.currentOrder.Shipper = s;
                });

                angular.forEach($scope.currentOrder.LineItems, function(item) {
                    item.ShipperName = $scope.currentOrder.Shipper ? $scope.currentOrder.Shipper.Name : null;
                    item.ShipperID = $scope.currentOrder.Shipper ? $scope.currentOrder.Shipper.ID : null;
                });

                saveChanges(function() {
                    $scope.shippingUpdatingIndicator = false;
                    $scope.shippingFetchIndicator = false;
                });
            }
            else { // at the lineitem level for multiple shipping
                angular.forEach($scope.shippers, function(s) {
                    if (s.Name == li.ShipperName)
                        li.Shipper = s;
                });
                li.ShipperName = li.Shipper.Name;
                li.ShipperID = li.Shipper.ID;
                saveChanges(function() {
                    $scope.shippingUpdatingIndicator = false;
                    $scope.shippingFetchIndicator = false;
                });
            }
        };

1 个答案:

答案 0 :(得分:0)

试试ng-init="updateShipper()"。然后在控制器中设置模型的初始值,如$scope.currentOrder.LineItems[0].ShipperName = 0(or whatever)