【问题标题】:Angular.js "typeError: V2.example is not a function" errorAngular.js“typeError:V2.example 不是函数”错误
【发布时间】:2016-08-31 17:00:29
【问题描述】:

我是 angular.js 的新手,我正在学习大约一年前制作的教程 我正在尝试创建一个搜索功能,该功能接受输入并在其中搜索 Github.com HTML 代码是:

<!DOCTYPE html>
<html ng-app="github">

<head>
    <script src="angular.min.js"></script>
    <script src="script.js"></script>
</head>

<body ng-controller="main">
    <h1>{{message}}</h1>
    <p> {{username}} </p>
    <form name="search">
        <input type="search" placeholder="enter name" ng-model="username">
        <button type="submit" ng-click="search(username)">search</button>
    </form>
    <div>
        <h1> {{user.login}} </h1>
        <img src="http://www.gravatar.com/avatar/{{user.gravatar_id}}">
        <p> {{user.type}} </p>
    </div>
</body>

</html>

还有 JS 代码:

// Code goes here
(function () {
    var app = angular.module("github", []);
    var main = function ($scope, $http) {
        var onComplete = function (response) {
            $scope.user = response.data;
        };
        var onError = function (reasone) {
            $scope.error = "no can";
        };
        $scope.search = function (username) {
            $http.get("http://api.github.com/users/" +username).then(onComplete, onError);
        };
        $scope.message = "Git hub viewer";
    };
    app.controller("main", ["$scope", "$http", main]);
}());

这给了我一个错误>>> TypeError: v2.search is not a function

这里是codepen链接:

http://codepen.io/ToBeM12/pen/vGvwzo

【问题讨论】:

标签: html angularjs


【解决方案1】:

该函数与另一个变量同名并且在 $scope 中存在冲突

在您的情况下,只需将 $scope.search 替换为 $scope.searchuser,因为 $scope.search 已经定义..

【讨论】:

  • 确实有可能发生这种情况
【解决方案2】:

我见过表单名称与范围函数或变量名称相同的问题。尝试将表单重命名为“searchForm”以避免与 $scope.search 冲突。

【讨论】:

  • 是的,这就是发生在我身上的事。我的 ng-model 被称为 editReview,我也有一个名为 editReview 的函数。
【解决方案3】:

一个简单的解决方案更改form name您的表单名称干扰函数名称

AngularJS error: TypeError: v2.login is not a function

上面是一个类似的问题,帮助我解决了这个问题。

【讨论】:

  • 这是为我做的。谢谢!
【解决方案4】:

试试这个

angular.module('github',[])  
.controller('main', ['$scope', '$http', function($scope, $http) { 
$scope.message = "Git hub viewer";
$scope.search = function (username) {
            $http.get("http://api.github.com/users/" +username).then(function(response){
                 $scope.user = response.data;
            });
        };
}])

【讨论】:

    【解决方案5】:

    不要这样做

    $scope.example = () => {
      $scope.example = 'object';
    }
    

    【讨论】:

      【解决方案6】:

      可能的解决方案:IIFE 写错了。

      (function(){...}());
      

      而不是

      (function(){...})();
      

      目前,这是我能找到的唯一错误。

      【讨论】:

      • @ToBe 这对您有帮助吗?
      【解决方案7】:

      @Integrator 写了正确的答案。只是想从你的角度控制器添加对表单的访问,你还需要编写 $scope.formName。例如:

      $scope.search.username.$invalid = true;
      

      通过这种方式,您将表单元素设置为无效。因此,在您的情况下,角度将形式与方法混淆。最好将表单名称设置为:xxxxForm 以避免此类冲突

      【讨论】:

        【解决方案8】:

        我知道这已经得到了回答,但我也遇到了同样的错误。最后是我的按钮上有 type="submit" 和 ng-click。当我删除 type="submit" 时,该函数运行良好,我不再收到错误。

        【讨论】:

          猜你喜欢
          • 2015-11-07
          • 2016-12-02
          • 2018-03-07
          • 2016-08-08
          • 2018-07-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-01
          相关资源
          最近更新 更多