ng-repeat中的动态ng模型未定义

时间:2016-09-04 11:11:31

标签: javascript angularjs angularjs-ng-repeat ng-repeat

我需要帮助在ng-repeat中动态生成模型。我有一个带有重复表行的HTML。每行都有一个选项,可以使用更新按钮更新图像名称和价格。

HTML

<tr role="row" class="odd" ng-repeat="i in slideShowImages track by $index">
    <td>
        <img ng-src="{{i.thumb_path}}" width="100px" height="auto" >
    </td>
    <td>
        <div class="form-group">
            <input type="text" name="imageName" ng-model="i.imageName[$index]"
                   class="form-control" id="imageName" required>
        </div>
    </td>
    <td>{{i.date_taken | myDate}}</td>
    <td>
        <div class="form-group">
            <input type="text" name="imagePrice" ng-model="i.imagePrice[$index]"
                   class="form-control" id="imagePrice" required>
        </div>
    </td>
    <td>
        {{i.position}}
    </td>
    <td>
        <a ng-click="updateImage(i.id_thumb, $index)">
            <button class="btn btn-block btn-success">Update</button>
        </a>
    </td>
    <td>
        <a ng-click="deleteImage(i.id_thumb, $index)">
            <button class="btn btn-block btn-danger">Delete</button>
        </a>
    </td>
</tr>

这是我的控制器功能,它试图获取值

$scope.updateImage = function(id, $index){
    $scope.models = {};
    console.log(id);
    console.log($index);
    console.log($scope.i.imageName[$index]);
    console.log($scope.i.imagePrice[$index]);
};
// result of console logs
4
0
angular.js:13550 TypeError: Cannot read property 'imageName' of undefined
    at Scope.$scope.updateImage (locationsCtrl.js:243)
    at fn (eval at compile (angular.js:14432), <anonymous>:4:486)
    at expensiveCheckFn (angular.js:15485)
    at callback (angular.js:25018)
    at Scope.$eval (angular.js:17229)
    at Scope.$apply (angular.js:17329)
    at HTMLAnchorElement.<anonymous> (angular.js:25023)
    at HTMLAnchorElement.dispatch (jQuery-2.1.4.min.js:3)
    at HTMLAnchorElement.r.handle (jQuery-2.1.4.min.js:3)

猜测我做错了什么,基于imageName和imagePrice无法定义的错误。我希望你们能帮助我。如果您需要任何其他信息,请告诉我,我会提供。提前谢谢

2 个答案:

答案 0 :(得分:3)

您有ng-repeat i in slideShowImages,表示在每次迭代i上只有UI的当前元素集合(不在控制器范围内)。因此,您无法在控制器中获得$scope.i值。您必须将updateImage中的该值作为ng-click="updateImage(i)"之类的参数传递。然后,您可以使用UI上提供的i对象。

<强> HTML

<td>
    <a ng-click="updateImage(i)">
        <button class="btn btn-block btn-success">Update</button>
    </a>
</td>
<td>
    <a ng-click="deleteImage(i, $index)">
        <button class="btn btn-block btn-danger">Delete</button>
    </a>
</td>

<强>控制器

$scope.updateImage = function(i){
    console.log(i.imageName);
    console.log(i.imagePrice);
};

答案 1 :(得分:1)

您无法在控制器中找到i ng-repeat对象。 其他人可以做的是使用json中的任何其他键进行过滤。

示例:

$scope.currentImageName = $filter('filter')(slideShowImages,{ id: $index});

此处假设slideShowImages的字段 id 值为$index

此外,在控制器定义中添加依赖注入$filter