如何根据模型值设置AngularJS选择值?

时间:2014-12-18 07:58:17

标签: angularjs

我有一个包含供应商列表的数组:

$scope.supplierList = [{id=1, name='supplier 1'}, {id=2, name='supplier 2'}];

然后我有一个模型(让我们称之为产品),我从一个服务中得到的值为:

id=1
name=Product A
supplier=supplier 1(this is an object reference)

当我将产品加载到表单进行编辑时,我需要有供应商1'是选择的选项,我尝试了不同的步骤,但似乎没有任何工作,我的代码如下:

<select  ng-model="product.supplier" ng-options="supplier.name for supplier in supplierList">
    <option value="">Select a Supplier</option>
</select>

在控制器中:

$scope.update = function (id) {//user clicks edit button, form modal shows up with filled up values because of model binding
    $scope.product = Product.get({id: id});//retrieving the product 
    $scope.product.supplier = $scope.supplierList[1];//trying out if i can change the selected to something else, never works! Always defaults to select a supplier
    //supplier is always deemed undefined

};  

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:1)

我认为Product.get({id: id});是对资源的调用,因此它将异步执行。来自服务器的数据将覆盖您的&#34; $scope.product.supplier&#34;分配。 尝试将此代码更改为:

$scope.update = function (id) {
    $scope.product = Product.get({id: id}, function(){
         $scope.product.supplier = $scope.supplierList[1];
    });
}; 

答案 1 :(得分:1)

我猜测Product是用$ resource(..)创建的。不明显的是,Product.get(..)调用将首先返回一个(几乎)空对象,一旦收到响应,将填充响应中的数据。同时,将删除对象中的任何先前值。

要设置供应商,您需要执行类似

的操作
$scope.product = Product.get({id: id}, function (product) {
  product.supplier = $scope.supplierList[1];
})

查看https://docs.angularjs.org/api/ngResource/service/ $资源,并考虑改为使用基本的$ http调用。 ngResource起初很好,很舒服,但很快就会出现问题,如你的问题所示。