在angular -ui中,indexOf函数未定义

时间:2014-03-17 23:52:34

标签: javascript angularjs

我正在尝试为选项列表添加删除功能: 但始终收到错误消息:indexOf未定义!

有人可以帮助我吗?提前谢谢!

以下是我的代码的一部分:

Html:

<div class="question_typeList" ng-switch-default>
                    <table class="question_heading">
                        <tbody>
                            <tr ng-repeat="option in question.options">
                                <td>
                                    <input class="question_textfield" placeholder="My Option" ng-model="option.value[lang]">
                                    <button ng-click="removeOption(option)">X</button>
                                </td>
                                <td>
                                    {{option.value}}
                                </td>
                            </tr>
                        </tbody>
                        {{question.options}}
                    </table>    
                    <button ng-click="newOption(question)">Add Options</button>
                </div>

js part:

$scope.questions = [
        {
          title: $scope.newTranslatable("Title"),
          description: $scope.newTranslatable("Mr./Mrs./Ms."),
          type: "list",
          options: [
            {
              value: $scope.newTranslatable("Mr")
            }, {
              value: $scope.newTranslatable("Mrs")
            }, {
              value: $scope.newTranslatable("Ms")
            }
          ]
        }


$scope.removeOption = function(option) {
        var index = $scope.questions.options.indexOf(option);
        if(index != -1) {
          $scope.questions.options.splice(index, 1);
        }
      }

1 个答案:

答案 0 :(得分:1)

$ scope.questions被定义为一个数组。 options不是数组的属性,而是数组元素的属性。

你必须遍历$ scope.questions数组。这引发了一个新问题,因为据我所知,你的问题数组似乎没有一个«key»字段可供比较。

尽管如此,假设您将设法获得一个独特的字段,我认为您可以实现一个函数来删除问题[x] .options选项:

    $scope.removeOption = function(uniqueKey,option) { 
       var questionIndex = $scope.questions.yourUniqueKeyField.indexOf(uniqueKey);
       if(questionIndex != -1){
          var optionIndex = $scope.questions[questionIndex].options.indexOf(option);
          if(optionIndex != -1) {
             $scope.questions[questionIndex].options[optionIndex].splice(optionIndex,1);
          }
       }
    }