Angularjs链接选择4个选择选项在变化时变空

时间:2013-11-06 19:34:35

标签: javascript angularjs select chained

我有以下问题:当我实现一个链式选择,例如4个选择,我更新第二个,第三个变空,但第四个保持值。这是一个链接到jsfiddle与我用来制作链式选择的策略(这个小提琴不是我做的!):

http://jsfiddle.net/pythondave/JUZDf/

  1. 选择经典车
  2. 选择1948 Porsche 356-A Roadster
  3. 选择颜色
  4. 选择红色
  5. 选择1949 Jaguar XK 120
  6. 现在你看到第四个选择不会变空 你怎么能把那个空的?

    HTML部分:

    <div ng-app ng-controller="SelectController">
     <select ng-model="category" ng-options="c.name for c in sampleProductCategories">    </select>
     <select ng-model="categoryItem" ng-options="p.name for p in category.products"></select>
     <select ng-model="subChild" ng-options="o.value for o in categoryItem.options"></select>
     <select ng-model="level4" ng-options="o.value for o in subChild.options"></select>
    
      <hr />
      category={{category.name}}<br/>
      product={{categoryItem.name}}<br/>
      subChild={{subChild.value}}<br/>
      level4={{level4.value}}<br/>
    
    </div>
    

    使用Javascript:

    function SelectController($scope) {
        // Data taken from KnockoutJs cart example
        $scope.sampleProductCategories = [
          {
            "name": "Classic Cars",
              "products": [
              {
                "name": "1948 Porsche 356-A Roadster",
                  "options":[
                      {"value": "Color",
                       "options":[
                      {"value": "Red"},
                      {"value":"Black"}
                      ],                                    
                   },
                      {"value":"Seats",
                      "options":[
                      {"value": "Leather"},
                      {"value":"Cloth"}
                      ],    
    
                      },
    
                     {"value":"Warranty",
                      "options":[
                      {"value": "2 Year"},
                      {"value":"3 Year"}
                      ],    
    
                      } 
    
                  ],
                "price": 53.9
              },
              {
                "name": "1948 Porsche Type 356 Roadster",
                "price": 62.16
              },
              {
                "name": "1949 Jaguar XK 120",
                "price": 47.25
              }
            ]
    
          },
          {
            "name": "Motorcycles",
            "products": [
              {
                "name": "1936 Harley Davidson El Knucklehead",
                "price": 24.23
              },
              {
                "name": "1957 Vespa GS150",
                "price": 32.95
              },
              {
                "name": "1960 BSA Gold Star DBD34",
                "price": 37.32
              }
            ]
    
          },
          {
            "name": "Planes",
              "products": [
              {
                "name": "1900s Vintage Bi-Plane",
                "price": 34.25
              },
              {
                "name": "1900s Vintage Tri-Plane",
                "price": 36.23
              },
              {
                "name": "1928 British Royal Navy Airplane",
                "price": 66.74
              },
              {
                "name": "1980s Black Hawk Helicopter",
                "price": 77.27
              },
              {
                "name": "ATA: B757-300",
                "price": 59.33
              }
            ]
    
          }
        ];
    }
    

1 个答案:

答案 0 :(得分:0)

当选择新的选择值时,它只更改链接到该选择框的模型变量,其余部分保持不变。因此,尽管为categoryItem选择了一个新值,subChild仍然保留其先前所选内容的值,并且正是这个值,第四个选择框构建了它的选项,从而保留了值。使用前3个选择框中的任何一个时,您将看到相同的结果。

您可以使用ng-change指令在选择框上执行更改以重置所需的范围变量:

<select ng-model="category" ng-change="update(select1)" ng-options="c.name for c in sampleProductCategories">    </select>
<select ng-model="categoryItem" ng-change="update(select2)" ng-options="p.name for p in category.products"></select>

然后在你的控制器中:

function SelectController($scope) {
    $scope.update = function (select) {
        // update the appropriate n-selectBoxNum scope variables here
    }
}
相关问题