我在我的应用程序中声明了一堆Angular模块.我最初开始使用"链式"语法声明它们,如下所示:
angular.module('mymodule', [])
.controller('myctrl', ['dep1', function(dep1){ ... }])
.service('myservice', ['dep2', function(dep2){ ... }])
... // more here
Run Code Online (Sandbox Code Playgroud)
但我觉得这不是很容易阅读,所以我开始使用这样的模块变量声明它们:
var mod = angular.module('mymodule', []);
mod.controller('myctrl', ['dep1', function(dep1){ ... }]);
mod.service('myservice', ['dep2', function(dep2){ ... }]);
...
Run Code Online (Sandbox Code Playgroud)
第二种语法对我来说似乎更具可读性,但我唯一的抱怨是这种语法将mod变量留在全局范围内.如果我有一些其他变量命名mod,它将被下一个(和其他与全局变量相关的问题)覆盖.
所以我的问题是,这是最好的方法吗?或者做这样的事情会更好吗?:
(function(){
var mod = angular.module('mymod', []);
mod.controller('myctrl', ['dep1', function(dep1){ ... }]);
mod.service('myservice', ['dep2', function(dep2){ ... }]);
...
})();
Run Code Online (Sandbox Code Playgroud)
或者甚至足够关心?只是想知道模块声明的"最佳实践"是什么.提前致谢.
我有一个对象数组,我正在使用它ng-repeat来迭代它们,这很容易.该数组看起来像这样:
$scope.steps = [
{companyName: true},
{businessType: true},
{physicalAddress: true}
];
Run Code Online (Sandbox Code Playgroud)
我的ng-repeat属性看起来像:
<div ng-repeat="step in steps"> ... </div>
Run Code Online (Sandbox Code Playgroud)
在每次迭代中,step等于其中一个对象,如预期的那样.无论如何都要访问step对象的键和值?所以我可以这样做:
<div ng-repeat="(stepName, isComplete) in steps"> ... </div>
Run Code Online (Sandbox Code Playgroud)
其中stepName== 'companyName'和isComplete== true.我已经尝试过做这件事,但stepName总是最终成为步骤对象的索引(这是有道理的).我只想弄清楚是否有另一种方法来编写ng-repeat语法,以便我可以获得密钥和值.
感谢您的任何想法/建议.非常感激.
PS.我目前的工作是在我的控制器中执行此操作:
$scope.stepNames = [];
angular.forEach($scope.steps, function(isComplete, stepName){
$scope.stepNames.push({stepName: stepName, isComplete: isComplete});
});
Run Code Online (Sandbox Code Playgroud)
然后迭代它,但在视图中完成所有操作会很好
我找不到任何关于如何设置它的信息,但它似乎是一个非常基本的概念,所以我确信那里有一个答案.
我知道如何通过在配置中设置对象的browserName属性来在不同的浏览器上运行量角器capabilities.而且这很有效.我可以将它设置为'chrome'或者'firefox'我需要的任何东西,它运行正常.但是,针对多个浏览器运行单个测试套件的唯一方法(据我所知)是创建单独的配置文件,每个配置文件都有不同的browserName,然后使用自己的配置运行每个浏览器.这可行,但它真的很慢,因为测试然后按顺序运行,而不是同时运行.
有没有办法在多个浏览器上并行运行它?
可以在SauceLabs上完成吗?甚至使用当地的Selenium-Grid?
我们只是想简化我们的测试流程,这将是一个巨大的帮助.任何建议或信息将不胜感激.提前致谢.
我正在使用Protractor来测试我的angular.js应用程序以及它在Chrome中的运行状况.我在设置和学习jasmine的额外webdriver语法方面遇到了一些问题,但是现在我已经掌握了它,并且正在运行并通过Chrome进行一些测试.
有谁知道在Firefox或Safari或IE或Opera中运行Protractor的方法?我希望能够针对比Chrome更多的浏览器运行这些测试.我查看了GitHub上的Protractor文档,但它只显示了配置文件chromeDriver.有没有Firefox驱动程序或Safari驱动程序?
PS.我不认为这会有多大帮助,所以我不会发布我当前的配置文件,但如果它有用,请告诉我,我可以在这里发布.
jasmine selenium-chromedriver angularjs selenium-webdriver protractor
我有一个我建立的网站(托管在亚马逊S3上)并且效果很好.唯一的问题是所有数据都是静态的.我想在云中创建一个SQL数据库,允许我在提交表单后存储用户的基本文本数据.我仍然是一个新手网络开发人员,但我已经将sqlite3用于我的几个Java桌面应用程序,并且我想使用该SQL知识来创建这个在线数据库.我猜我(无知)的问题是:如何创建一个存储在云中的sqlite类型数据库,我可以使用javascript查询?
我从哪里开始?是否有像Amazon AWS或Azure这样的服务或我可以创建此数据库然后使用某种jQuery/Javascript API从中查询数据的服务?我不需要大量的存储空间,我的查询将是非常基本的SQL类型的东西.
任何帮助将不胜感激.提前致谢.
我真的很喜欢ng-clickAngular中的新指令现在自动包含触摸事件的功能.但是,我想知道是否可以从我的自定义指令访问该触摸事件服务?我有很多指令要求我将click事件绑定到给定元素,但我只是使用典型的jquery语法(例如:) element.on('click', function(){ ... }).有没有办法可以将ng-click事件绑定到指令中的元素?无需ng-click在我的视图的HTML中手动将标记放在我的元素上......?
我希望能够利用点击和触摸事件的力量.我显然可以导入一个库(例如HammerJS或QuoJS),但我不想这样做,特别是因为Angular已经在做了.
我可以访问该$swipe服务并绑定不同的元素,但是有类似的服务ngTouch吗?
作为参考,这是我想要这样做的一个例子:
mod.directive('datepicker', ['$timeout', function($timeout){
return {
link: function(scope, elem, attrs){
var picker = new DatePicker();
elem.on('click', function(e){
picker.show();
});
// I would rather do something like:
// elem.on('ngTouch', function(){ ... });
//
// or even:
// $ngTouch.bind(elem, {'click': ..., 'touch': ...});
}
}
}]);
Run Code Online (Sandbox Code Playgroud)
更新:如下所述,该ng-click指令的源代码在这里.谁能看到一种方法来利用该代码并将其转变为"可绑定"服务?
在过去的一年左右的时间里,我已经构建了无数角度驱动的,类似于你的搜索式搜索,我喜欢它们实现起来的容易程度.但是,我从来没有找到一个好的解决方案的一个问题是如何正确地对这些搜索结果进行排序.我真的很感激任何有关如何做到这一点的想法的人.
这是我的问题:
请参阅此Plunker以供参考
如果你看一下上面这个超级简单的示例plunker,我有一个我希望能够搜索的样本宠物列表.如果我在字段中输入任何文本,宠物列表就会缩小.这一切都很棒.我的问题是,搜索结果的排序与它们与输入文本的相似程度无关.
例如:
列表中共有8只宠物,name使用orderBy:'name'列表ng-repeat指令中的过滤器进行排序.如果我只T输入输入的字符,我只剩下5个剩余的结果.但是列表顶部的宠物是"blackie"(因为blackie是列表中的第一个宠物t,因为blackie type是"cat",其中包含a t).

我希望看到的是通过它们与搜索文本的相似性来对剩余结果进行排序的方法.所以,在上面的例子中,我没有看到列表顶部的"blackie",而是看到"tom"(位于已过滤列表的底部),因为tom的名字实际上是以字母开头的t,这就是我的意思开始寻找并且更有可能成为我想要找到的东西.
关于如何实现这种搜索算法的任何想法?我无法在谷歌搜索中找到任何东西以及我编写这种算法的所有尝试.
提前感谢您的想法!
我正在尝试做一些在我脑海中非常简单的事情,但我所做的一切努力都失败了.
使用ng-model和$setValidity(),我可以使任何字段有效或无效和角度将'ng-invalid'类添加到任何无效字段,这很好.我正在使用bootstrap,它具有"input:invalid"的内置样式,当这些元素处于焦点时,它会在所有无效元素周围添加红色边框.
我的问题是我想***在我的表单中添加一个无效的输入,以便用户可以快速查看需要修复的字段.我认为通过执行以下操作,我只能使用CSS来做到这一点:
input.ng-invalid{
border: 2px solid red;
}
input.ng-invalid:after{
content: '***';
}
Run Code Online (Sandbox Code Playgroud)
我有一个plunker,在这里演示了一个简单的例子.该示例<input>是必需的,因此如果您只是从字段中删除文本,它将立即变为无效并获得一个大的红色边框.但它没有得到content: '***';风格.
我只是不明白:after选择器在CSS中是如何工作的?或者我做错了什么?任何指针都将非常感激.谢谢!