使用UI路由器实现控制器A的最佳实践方法
Best practice way to implement contoller As using UI Router
拥有一个使用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;
controller: 'HomeCtrl as home'
将与ui路由器一起工作。
编辑:
您还需要在将任何对象/变量分配给vm
之前或期间定义和初始化它们。在更新后的代码中,您已经定义了searchTerms
,但它尚未初始化。假设searchTerms
是一个字符串,请参阅以下可能的纠正方法。
var searchTerms = '';
var vm = this;
vm.searchTerms = searchTerms;
或者根据您的使用需求,您只能在未定义的情况下进行初始化:
var searchTerms = searchTerms || '';
var vm = this;
vm.searchTerms = searchTerms;
或者,如果您不需要单独的内部变量,您可以直接初始化vm.searchTerms
(但在大多数情况下,我个人不喜欢这种方法):
var vm = this;
vm.searchTerms = '';
关于发布的代码的其余部分,您通常应该只向视图显示您需要从那里访问的内容,并将其余内容包含在您的控制器(或服务/工厂等)中。
到目前为止,我还没有找到一套坚实、独特的angular最佳实践,但一个很好的起点是John Papa的angular Style Guide。
- 有条件更新d3.js力图中节点的最佳方法
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 处理浮点错误的最佳方法是什么
- 从数组中删除元素的最佳方法是:javascript/jquery
- 以编程方式填充组合框道场 (1.8) 的最佳方法是什么?
- 列出没有 mysql 的元素的最佳方法是什么
- 在jquery库中重新定义方法的最佳方法
- Javascript,用vars创建对象的最佳方法
- 使用 jQuery 从 HTML 中获取某些值的最佳方法
- 在变量中保存值的最佳方法是在应用程序关闭后使用,然后使用apachecordova在android中重新启动
- 在d3.json中使用d3.csv组合多个csv文件数据输入的最佳方法是什么
- 用jasmine测试JavaScriptUI的最佳方法
- 使用javascript:在没有阻止html标记(<b>、<p>等)的情况下,阻止脚本的最佳方法
- 如果我返回表,检查 Ajax 调用是否为 200 OK的最佳方法是什么
- JavaScript - 创建可链接函数时的最佳方法是什么
- 在上下文菜单项单击上显示侧边栏/弹出窗口的最佳方法是什么
- 在 JavaScript 中获取范围的随机数的最佳方法
- 在对象类上实现 jquery 作用域的最佳方法
- 将同步函数包装到承诺中的最佳方法是什么?
- 使用 MVC 删除 JavaScript 中硬编码字符串 Asp.Net 最佳方法