javascript - Angularjs Controller : Cannot set property 'query' of undefined

标签 javascript angularjs controller

我是 Angular 的新手。我想在我的 Controller 中将变量 query 设置为 null 并将 imgType 设置为 "illustration",但它抛出:

Uncaught TypeError: Cannot set property 'query' of undefined".

你知道这是怎么回事吗?否则一切正常

我正在使用 AngularJS 1.4.3

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body ng-app="ilustracka">
        <!--Controller-->
        <div ng-controller="SearchController as searchCtrl" ng-cloak>
            <!--Searching-->
            <form ng-submit="searchCtrl.search()"> 
                <input type="text" ng-model="searchCtrl.query" placeholder="search...">
                <select ng-model="searchCtrl.imgType">
                    <option value="illustration" selected>ILU</option>
                    <option value="image">IMG</option>
                </select>
                <button type="submit">SEARCH</button>
            </form>

            <!--Summary result--
            <summary></summary>-->

            <!--Result-->
            <output></output>      
        </div>

        <!--JavaScripts-->  
        <script src="libs/angularjs/angular.min.js"></script>
        <script src="scripts/ilustracka.js"></script>
        <script src="scripts/searchController.js"></script>
        <script src="scripts/outputDirective.js"></script>
        <script src="scripts/searchApiService.js"></script>        
    </body>
</html>

Controller

(function () {
    'use strict';

    angular
        .module('ilustracka')
        .controller('SearchController', SearchController);

    //load service searchApi
    SearchController().$inject['searchApi'];

    function SearchController(searchApi) {
        var vm = this;
        /*
         * vars
         */
        vm.query = null;//search string
        vm.imgType = 'illustration';//type of search image - (ilu|img)
        vm.images = null;//result of query - empty object
        vm.result = null;//showing result or info message
        /*
         * functions
         */
        vm.search = search;


        function search(){
            //!empty searchQuery
            if(vm.query){
                searchApi.searchImg(vm.query, vm.imgType); 
                vm.images = searchApi.getImages();
                vm.result = searchApi.getResult();
            }            
        }   
    }
}());

插图

(function(){
    "use strict";   
    angular
            .module("ilustracka", []);
}());

最佳答案

您的问题是如何将 searchApi 服务注入(inject)您的 Controller 。 $inject 不是方法而是属性,正确的语法应该是:

SearchController.$inject = ['searchApi'];

使用您的原始代码 SearchController().$inject['searchApi']; 它抛出了未处理的错误,因为 SearchController() (函数调用的结果)返回 undefined 和 undefined 没有属性 $inject。但是,它不会阻止进一步的 Controller 实例化,但随后会发生新的错误 - 由于缺少依赖项注入(inject)而导致未知的提供者。这会阻止正确的 Controller 实例创建。

关于javascript - Angularjs Controller : Cannot set property 'query' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31890848/

相关文章:

javascript - 如何在 Javascript 文本节点中获取 HTML 标签?

javascript - 如何让网络浏览器下载存储在 JavaScript 字符串中的文件?

javascript - :not() Selector in a multiple select

events - AngularJS 指令切换菜单防止其他指令的默认设置

jquery - IE 11 中 FormData 出现未定义错误

php - CakePHP 在登录时保存日期/时间

java - Spring 3.1 Controller 返回 HTML 页面的名称 - 它可以工作吗?

javascript - 在 python selenium 中使用 JS 脚本向下滚动

javascript - 处理 Safari/Chrome 上的取消按钮以在 App Store 弹出窗口中打开

c# - 如何在 MVC 3 中使用模型优先方法验证搜索字符串?