Angular.js“typeError:V2.example不是函数”错误

时间:2016-05-05 19:12:58

标签: html angularjs

我是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]);
}());

这给了我一个错误&gt;&gt;&gt; TypeError:v2.search不是函数&lt;&lt;&lt; 求助: 我有这样的问题,解决方案不是在全局类型中使用“主”功能,但“搜索”不是全局我猜...希望这个帮助

  

这是codepen链接:

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

8 个答案:

答案 0 :(得分:14)

该函数与另一个变量同名,并且在$ scope

中存在冲突

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

答案 1 :(得分:7)

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

答案 2 :(得分:2)

试试这个

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;
            });
        };
}])

答案 3 :(得分:2)

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

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

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

答案 4 :(得分:1)

不要这样做

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

答案 5 :(得分:0)

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

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

而不是

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

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

答案 6 :(得分:0)

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

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

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

答案 7 :(得分:0)

我知道这已经得到了解答,但我也遇到了同样的错误。结果是我在按钮上输入了type =“submit”并点击了ng。当我删除type =“submit”时,该功能正常工作,我不再收到错误。