我使用AngularJS创建了一个水平下拉菜单.
菜单部分由名为menuController的角度控制器管理.实现标准菜单行为,以便在悬停主菜单项时突出显示,除非它被禁用.单击主菜单项时,子菜单切换.如果子菜单处于打开状态,我希望当用户单击文档上的任何其他位置时它会消失.我试图创建一个指令来监听文档点击事件但不确定如何通知菜单控制器.我应该如何以AngularJS方式实现此场景?
部分工作Original Plunk没有文档点击处理机制.
更新:
根据回答的建议,我采用了Brodcast方法并更新了脚本以反映我最新的更改.它按照我的期望工作.我将globalController $ broadcast作为消息,menuController订阅了该消息.
更新2:修改代码以注入全局事件定义数据.
var eventDefs = (function() {
return {
common_changenotification_on_document_click: 'common.changenotification.on.document.click'
};
}());
var changeNotificationApp = angular.module('changeNotificationApp', []);
changeNotificationApp.value('appEvents', eventDefs);
changeNotificationApp.directive("onGlobalClick", ['$document', '$parse',
function($document, $parse) {
return {
restrict: 'A',
link: function($scope, $element, $attributes) {
var scopeExpression = $attributes.onGlobalClick;
var invoker = $parse(scopeExpression);
$document.on("click",
function(event) {
$scope.$apply(function() {
invoker($scope, {
$event: event
});
});
}
);
}
};
}
]);
changeNotificationApp.controller("globalController", ['$scope', 'appEvents',
function($scope, appEvents) {
$scope.handleClick = function(event) { …Run Code Online (Sandbox Code Playgroud) 我正在使用 HttpClient 调用 Web Api REST 端点,偶尔我会看到一个随机的 401 未授权状态。
这是我的 HttpClient 包装器,它是为可重用性目的而创建的。我已经修改了它以保持这篇文章的简单而不修改核心部分。
public class HttpHelper
{
public const string JsonContentType = "application/json";
public T PostAsJsonObject<T>(string uri, T t) where T : class
{
using (HttpResponseMessage response = PostJsonHttpRequest(uri, JsonContentType, t))
{
response.EnsureSuccessStatusCode();
return response.Content.ReadAsAsync<T>().Result;
}
}
private HttpResponseMessage PostJsonHttpRequest<T>(string uri, string contentType, T content) where T : class
{
if (String.IsNullOrEmpty(uri))
{
throw new ArgumentNullException("uri");
}
HttpResponseMessage response = CreateHttpClient(contentType).PostAsJsonAsync(uri, content).Result;
return response;
}
private HttpClient CreateHttpClient(string contentType)
{
var …Run Code Online (Sandbox Code Playgroud) 我正在尝试启动并运行angular2 quickstart应用程序,但在运行gulp命令时遇到错误.
我有ubuntu 15.04.我安装了nodejs v0.10.25和npm 1.4.21.我还安装了gulp v3.9.0.我用克隆了最新的angular2/quickstart
git clone https://github.com/angular/quickstart.git hello2ng2
然后我进入hello2ng2文件夹并发出以下命令
npm安装
然后我发出以下命令来构建快速入门应用程序
吞
我有以下错误...不知道如何解决它.寻求帮助.
[12:38:46] Starting 'default'...
[12:38:46] Starting 'clean'...
[12:38:46] Finished 'clean' after 13 ms
[12:38:46] Starting 'build:ng2'...
npm WARN package.json angular2@2.0.0-alpha.30 No repository field.
npm WARN package.json rtts_assert@2.0.0-alpha.30 No repository field.
npm WARN package.json angular2@2.0.0-alpha.30 No repository field.
npm WARN package.json rtts_assert@2.0.0-alpha.30 No repository field.
events.js:72
throw er; // Unhandled 'error' event
^
Error: ENOENT, open '/home/usernm/angulartest/helloworld/hello2ng2/node_modules/angular2/es6/prod/angular2.api.map'
npm WARN package.json rtts_assert@2.0.0-alpha.30 No repository field.
events.js:72
throw …Run Code Online (Sandbox Code Playgroud) 我是 shell 脚本新手。我正在尝试编写一个脚本,该脚本应该运行命令并使用 for 循环来捕获输出的第一列并进行进一步处理。
命令:tst get files
该命令的输出类似于
NAME COUNT ADMIN
FileA.txt 30 adminA
FileB.txt 21 local
FileC.txt 9 local
FileD.txt 90 adminA
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所尝试过的:更新也想运行其他命令
#!/bin/bash
for f in $(tst get files)
do
echo "FILE :[${f}]"
tst setprimary ${f} && tst get dataload
done
Run Code Online (Sandbox Code Playgroud)
我看到的输出是这样的
FILE :[NAME]
FILE :[COUNT]
FILE :[ADMIN]
FILE :[FileA.txt]
FILE :[30]
FILE :[adminA]
FILE :[FileB.txt]
FILE :[21]
FILE :[local]
FILE :[FileC.txt]
FILE :[9]
FILE :[local]
FILE :[FileD.txt]
FILE :[90]
FILE :[adminA]
Run Code Online (Sandbox Code Playgroud)
我正在寻找类似的输出
FILE …Run Code Online (Sandbox Code Playgroud)