【发布时间】:2016-04-14 18:39:49
【问题描述】:
拥有一个使用 AngularJS 和 Elasticsearch 的小型搜索应用程序。试图将我的应用程序从使用 $scope 转换为 controller As 语法。我正在为我的路线/状态使用 UI 路由器。一直在尝试使用
controller: 'HomeCtrl',
controllerAs: 'home'
在我的州声明中。然后 var vm = this; 在控制器中绑定到作用域。
我将搜索输入上的ng-model="searchTerms" 切换为ng-model="home.searchTerms",其他任何地方都需要绑定。都不行?
在父 div 中使用 ng-controller="HomeCtrl as home" 更好吗?这是最佳做法吗?它可以与 UI 路由器一起使用吗?
更新 我现在有
var vm = this;
vm.searchTerms = searchTerms;
但它仍然不起作用,我在 Chrome 控制台中不断收到此错误
Uncaught ReferenceError: searchTerms is not defined(…)
更新的控制器
'use strict';
angular.module("searchApp.autocomplete", [])
.controller('HomeCtrl', ['$sce', '$state', '$stateParams', 'searchService', function($sce, $state, $stateParams, searchService) {
var vm = this;
var searchTerms = searchTerms;
vm.searchTerms = searchTerms;
vm.noResults = false;
vm.isSearching = false;
vm.results = {
searchTerms: null,
documentCount: null,
documents: [],
queryTime : null,
searchTermGrams: null,
itemsPerPage: 10,
maxResults: 100
};
//autocomplete
vm.autocomplete = {
suggestions: [],
corrections: []
};
vm.showAutocomplete = false;
【问题讨论】:
-
您是否通过
vm使searchTerms可见?比如在控制器中,有没有vm.searchTerms = searchTerms这样的语句? -
@ankur 抱歉耽搁了,我得先出去一会儿,让我检查一下我的代码
-
@ankur 请参阅上面的更新
-
你能发布你的控制器吗?如果您在将 searchTerms 分配给别名后定义了它,则可能会引发该错误。
-
searchTerms未初始化。我认为它是一个字符串?我正在更新我的答案以反映这一点。此外,您的所有对象都需要在控制器之外可见吗?如果没有,您可以删除vm.。
标签: javascript angularjs