2

我对 angularJS 很陌生。我想为我的一个文本框使用预输入,但是当我使用它时,它会出现该错误:

TypeError:无法在范围内调用未定义的方法“替换”。( http://XX.YY.ca/js/lib/ui-bootstrap.js:3426:32 ) 在 fnInvoke ( http://XX.YY.ca/js/lib/angular.js:10017:21 )在运营商处。| ( http://XX.YY.ca/js/lib/angular.js:9532:59 ) 在 Object.extend.constant [as get] ( http://XX.YY.ca/js/lib/angular. js:9962:14 ) 在 Scope.$digest ( http://XX.YY.ca/js/lib/angular.js:11800:40 ) 在 Scope.$apply ( http://XX.YY.ca/ js/lib/angular.js:12061:24)在 HTMLButtonElement。( http://XX.YY.ca/js/lib/angular.js:17839:21 ) 在 HTMLButtonElement.n.event.dispatch ( http://code.jquery.com/jquery-1.11.0.min. js:3:8066) 在 HTMLButtonElement.r.handle ( http://code.jquery.com/jquery-1.11.0.min.js:3:4767 )

我的代码与 angular-ui 网站上的代码基本相同。这里是:

标记:

<div class="modal-body">
    <div class="form-group">
        <input type="text" id="customer" autocomplete="off"
               ng-model="nom" tabindex="0"
               typeahead="customer.customerFirstName for customer in getCustomers($viewValue) | filter:$viewValue"
               typeahead-wait-ms="300" typeahead-on-select="setId($item)"
               typeahead-editable="false" class="form-control input-sm" placeholder="Customer" />
    </div>
</div>

控制器:

    [...]
    $scope.getCustomers = function (val) {
        return $http.get('/index.php/customers/get_customers_ajax', {
            params: {val: val}
        }).then(function (res) {
            var customers = [];
            angular.forEach(res.data, function (item) {
                customers.push({
                    'customerID': item.customerID,
                    'customerFirstName': item.customerFirstName,
                    'customerLastName': item.customerLastName
                })
            })
            console.log(customers);
            return customers;
        });
    }
    $scope.setID = function ($item) {
        $scope.newOrder.customerID = $item.customerID;
        Console.log($scope.newOrder.customerID);
    }
});

后端响应:

[
    {"CustomerID":"1","CustomerLastName":"Pan","CustomerFirstName":"Petter"}, 
    {...}
]

我不知道我可以提供哪些附加信息,但如果有,请询问,我会发布!

4

2 回答 2

2

我认为你应该改变这一行:

typeahead="customer.customerFirstName for customer in getCustomers($viewValue) | filter:$viewValue"

似乎语法应该是:

typeahead="<name> for <name> in getCustomers($viewValue) | filter:$viewValue"

如果<name>第一个位置不等于<name>第二个位置,则返回错误。

尝试将您的代码更改为:

typeahead="customer for customer in getCustomers($viewValue) | filter:$viewValue"

并在您的 javascript 中直接放入customerFirstName返回的数组中。

于 2014-03-28T14:51:26.947 回答
0

我认为问题在于您正在设置 ng-model="nom",但您的控制器中没有定义 $scope.nom 变量。Angular 正在尝试将从 typeahead 中选择的客户绑定到控制器中的 nom 变量。

于 2014-03-23T14:14:44.700 回答