我正在尝试使用TypeScript在具有现有JavaScript代码的项目中设置角度搜索控制器。

下面是我的控制器。

/// <reference path="../Models/ISearchSrvc.ts" />
/// <reference path="../Services/searchSrvc.ts"/>
module GLA.Controllers {
    export class SearchCtrl {
        searchService: Services.SearchSrvc;
        searchTerms: string;
        pattern: RegExp = /^\s*\w*\s*$/;
        static $inject = ["Services.SearchSrvc"];
        constuctor(service: Services.SearchSrvc) {
            this.searchService = service;
        }
        searchResults: Models.IResultsContainer;
        getSearch = () => {
            this.searchResults = this.searchService.search(this.searchTerms);
        }
    }
    angular.module("GLA").controller("GLA.Controllers.SearchCtrl", SearchCtrl);
}


然后,将它们导入到项目的共享_Layout页面中

<script src="~/Angular/Services/searchSrvc.js"></script>
<script src="~/Angular/Controllers/searchCtrl.js"></script>


然后,当使用ng-controller定义我要使用控制器的div时,我得到Argument 'SearchCtrl' is not a function, got undefined

但是,如果我在JS中创建一个控制器,如下所示:

GLA.controller('testCtrl',['$scope','searchSrvc', function($scopt, searchSrvc) {
$scopt.whatwhat = "whatwhat!!";
}])


该控制器可用于我项目中的任何Div。
任何形式的帮助将非常感激!

我已经和其他开发人员讨论过这个问题,因为没有人在TypeScript中做过很多事情,所以我们没有运气,但是我敢肯定其他部分已经正确实现,这只是JavaScript中的Typescript控制器问题项目也许?

下面是编译后的控制器:

/// <reference path="../Models/ISearchSrvc.ts" />
/// <reference path="../Services/searchSrvc.ts"/>
alert("loaded");
var GLA;
(function(GLA) {
    var Controllers;
    (function(Controllers) {
        var SearchCtrl = (function() {
            function SearchCtrl() {
                var _this = this;
                this.pattern = /^\s*\w*\s*$/;
                this.getSearch = function() {
                    _this.searchResults = _this.searchService.search(_this.searchTerms);
                };
            }
            SearchCtrl.prototype.constuctor = function(service) {
                this.searchService = service;
            };
            SearchCtrl.$inject = ["Services.SearchSrvc"];
            return SearchCtrl;
        }());
        Controllers.SearchCtrl = SearchCtrl;
        angular.module("GLA").controller("GLA.Controllers.SearchCtrl", SearchCtrl);
    })(Controllers = GLA.Controllers || (GLA.Controllers = {}));
})(GLA || (GLA = {}));
//# sourceMappingURL=searchCtrl.js.map

最佳答案

我终于解决了

以下是引起我悲伤的那一行:

angular.module("GLA").controller("GLA.Controllers.SearchCtrl", SearchCtrl);

更改为:

angular.module("GLA").controller("SearchCtrl", SearchCtrl);
删除GLA.Controllers

这使控制器在全球范围内都可以使用,但是我不确定该字符串代表什么,或者为什么它对于GLA.Controller无效,因为我在其他项目中也已类似地构建了它。

关于javascript - JavaScript Angular项目中的TypeScript-参数'SearchCtrl'不是函数或未定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41853502/

10-10 22:11