我尽力将这个问题作为精确的标题.
我对AngularJS很陌生,但我对这个问题很着迷.我试图制作一个jsfiddle来更好地说明我的问题,但它依赖于太多单独的文件.唉它还没有在线,所以请耐心等待.:)
所以基本上我有一个我建立的应用程序yeoman init angular,我app.js看起来像这样:
"use strict"
var myApp = angular.module("myApp", [])
.config(function($routeProvider) {
$routeProvider
.when("/lineup", {
templateUrl: "views/lineup.html",
controller: "LineupCtrl"
})
//other routes
.otherwise({
redirectTo: "/"
});
})
.directive("playerlist", function() {
return {
restrict: "E",
transclude: false,
scope : {},
templateUrl : "views/directives/playerlist.html",
controller : function($scope) {
$.get("/players")
.success(function(players) {
$scope.players = players;
});
},
replace : true
}
});
Run Code Online (Sandbox Code Playgroud)
我index.html拿起app.js并有一个引用的锚#/lineup,它有效地打开views/lineup.html; 为了简化,我们假设后者只包含(自定义)<playerlist></playerlist>标签.
在指令的控制器功能中,我确信它$.get("/players")可以正常工作,因为我可以从chrome的网络选项卡中看到响应正确地作为一组玩家进行. …
我想知道是否有办法将我在AngularJS模块中定义的所有工厂导入控制器而无需全部列出.假设我有一个名为contains的文件foo.js:
angular.module("Foo", [])
.factory("Bar1", function() {...})
.factory("Bar2", function() {...})
.factory("Bar3", function() {...})
.factory("Bar4", function() {...});
Run Code Online (Sandbox Code Playgroud)
现在,在我的controller.js档案中,我有:
angular.module("myApp.controllers", ["Foo"]).
controller("MainCtrl", ["Bar1", "Bar2", "Bar3", "Bar4", function(bar1, bar2, bar3, bar4) {
//do stuff with the various bars
}]);
Run Code Online (Sandbox Code Playgroud)
我只是想知道控制器是否有任何优雅的方式,因为它已经导入模块Foo,看到它的所有工厂(或提供者,或服务,或指令).
好吧标题说明了一切,我正在尝试编写一个利用库的脚本(在nodejs/express服务器端应用程序中运行)request,unzip并xml2js执行一个包含从给定URL获取zip文件的任务,其内容是一个xml文件,我需要解析为javascript对象进行进一步处理.
到目前为止,我已经设法提出:
var express = require("express");
var app = express();
/* some init code omitted */
var request = require("request");
var unzip = require("unzip");
var xml2js = require("xml2js");
var parser = new xml2js.Parser();
app.get("/import", function(req, res) {
request("http://path.to/file.zip")
.pipe(unzip.Parse())
.on("entry", function(entry) {
//This is what I'm trying to avoid, which doesn't even work
entry.pipe(fs.createWriteStream(entry.path));
fs.readFile(entry.path, function(err, data) {
if(err) {
return res.status(500).send(err);
}
parser.parseString(data, function(err, obj) {
console.log(util.inspect(obj));
/* further processing of obj */ …Run Code Online (Sandbox Code Playgroud) 在我正在开发的AngularJS模块中,我有一个Canvas类定义为:
angular.module("myModule", [])
.factory("Canvas", function() {return Canvas;});
var Canvas = function(element, options) {
this.width = options.width || 300;
this.height = options.height || 150;
this.HTMLCanvas = $(element).get(0);
this.HTMLCanvas.width = canvas.width;
this.HTMLCanvas.height = canvas.height;
this.objects = [];
//Initialize canvas
this.init();
}
Canvas.prototype.init = function() {/*...*/};
Canvas.prototype.otherMethod = function() {/*...*/};
Run Code Online (Sandbox Code Playgroud)
现在,Canvas该类从未在模块内部实例化,而是从AngularJS控制器实例化,如下所示:
angular.module("myApp.controllers", ["myModule"])
.controller("MainCtrl", ["Canvas", function(Canvas) {
var canvas = new Canvas("#canvas", {/*options object*/});
//...
}]);
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切都像一个魅力.但后来我意识到我需要$q在canvas对象中使用该服务,并且因为我不想将它注入我的控制器并将其传递给Canvas构造函数,所以我想要修改我的模块,如下所示:
angular.module("myModule", [])
.factory("Canvas", ["$q", function(q) {
var that …Run Code Online (Sandbox Code Playgroud) 不确定这篇文章的标题是否准确。我试图通过在循环中“组合”它们的名称来访问 Windows 窗体控件及其属性,但我似乎找不到相关文档。使用VB.net。基本上,假设我有以下内容:
Dim myDt As New DataTable
Dim row As DataRow = myDt.NewRow()
row.Item("col01") = Me.label01.Text
row.Item("col02") = Me.label02.Text
'...
row.Item("colN") = Me.labelN.Text
Run Code Online (Sandbox Code Playgroud)
我想编写一个 for 循环而不是 N 个单独的指令。虽然表达作业的左侧很简单,但当涉及到右侧时,我却被难住了:
For i As Integer = 1 to N
row.Item(String.format("col{0:00}", i)) = ???
' ??? <- write "label" & i (zero-padded, like col) and use that string to access Me's control that has such name
Next
Run Code Online (Sandbox Code Playgroud)
另外,我希望能够将最终的“.Text”属性作为字符串传递,因为在某些情况下我需要“Text”属性的值,在其他情况下需要“Value”的值“ 财产; 一般来说,我感兴趣的属性可能是 i 的函数。
干杯。
我知道标题很长,但老实说,我无法为我的具体案例想出更好的标题(欢迎提出建议)。所以基本上我记下了这个 JSFiddle(一个简化版本)我面临的问题。我正在使用 AngularJS 的$q.all方法来收集依赖于查询结果的承诺数组:
db.transaction(function(tx) {
$q.all(fn(tx)).then(function(a) {
console.log("Result:", a);
});
});
Run Code Online (Sandbox Code Playgroud)
wherefn是一个返回承诺数组的函数。
在上述情况下,一切都按预期工作,并且结果(解决承诺的 sql 查询结果数组)console.log正确生成。
但是,如果我包装$q.all在then另一个延迟对象的方法中,如下所示:
db.transaction(function(tx) {
fn2(tx).then(function(tx) {
$q.all(fn(tx)).then(function(a) {
console.log("Result:", a);
});
});
});
Run Code Online (Sandbox Code Playgroud)
我得到的错误:Error: Failed to execute 'executeSql' on 'SQLTransaction': SQL execution is disallowed.
(fn2的是,仅仅是返回一个承诺,其解析为一个函数tx对象本身)。
我是否偶然发现了一个常见的陷阱?我搜索了但没有想出任何东西。干杯。
标题很拗口,甚至不知道它的准确的(不能做的多大意义这个),所以我会尽力解释想我做到在C#使用等效javascript.关于我应该对这个问题提出什么标题的任何建议都非常受欢迎.
在C#,说我已经定义了这个功能:
Func<string, string> getKey = entity => {
switch(entity) {
case "a":
return "foo";
case "b":
return "bar";
default:
return "baz";
}
};
string key = getKey(/* "a", "b", or something else */);
Run Code Online (Sandbox Code Playgroud)
现在假设我不想getKey显式定义函数,而是像在此等效javascript代码段中那样匿名使用它:
string key = (function(entity) {
switch(entity) {
case "a":
return "foo";
case "b":
return "bar";
default:
return "baz";
}
}(/* "a", "b", or something else */));
Run Code Online (Sandbox Code Playgroud)
我该C#怎么写呢?我试过了:
string key = (entity …Run Code Online (Sandbox Code Playgroud)