小编mar*_*seu的帖子

使用RequireJS延迟加载AngularJS模块

感谢Dan Wahlin的精彩文章,我设法实现了Angular控制器和服务的延迟加载.但是,懒惰加载独立模块似乎没有一种干净的方法.

为了更好地解释我的问题,假设我有一个应用程序将是如下结构没有RequireJS:

// Create independent module 'dataServices' module with 'Pictures' object
angular.module("dataServices", []).factory("Pictures", function (...) {...});

// Create 'webapp' ng-app, with dependency to 'dataServices', defining controllers
angular.module("webapp", ['dataServices'])
.controller("View1Controller", function (...) {...})
.controller("View2Controller", function (...) {...});
Run Code Online (Sandbox Code Playgroud)

以下是Plunker中带有RequireJS的示例应用程序:http://plnkr.co/aiarzVpMJchYPjFRrkwn

问题的核心是Angular不允许ng-app在实例化后添加依赖.结果,我的解决方案是用来angular.injector检索我要使用的Picture对象实例View2Controller.见js/scripts/controllers/ctrl2.js文件.

这给我带来了两个问题:

  1. 注入的服务在angular之外运行,因此所有异步调用必须以$ scope结尾.$ apply()
  2. 凌乱的代码,其中一些对象可以使用标准角度语法注入,而其他对象需要显式使用注入器.

你有没有想过如何使用RequireJS延迟加载独立模块,并以某种方式将此模块挂钩角度,因此可以使用正常的角度依赖注入语法?

注意:
问题是关于独立模块的延迟加载.这个具体示例的一个简单解决方案是使用缓存的$ providers创建"Pictures"对象,ng-app.config但这不是我想要的.我正在寻找适用于第三方模块的解决方案,例如angular-resource.

requirejs angularjs

22
推荐指数
2
解决办法
2万
查看次数

Apache Beam 不支持 Kotlin Iterable?

Apache Beam 似乎拒绝识别 Kotlin 的Iterable. 这是一个示例代码:

@ProcessElement
fun processElement(
    @Element input: KV<String, Iterable<String>>, receiver: OutputReceiver<String>
) {
    val output = input.key + "|" + input.value.toString()
    println("output: $output")
    receiver.output(output)
}
Run Code Online (Sandbox Code Playgroud)

我收到以下奇怪的错误:

java.lang.IllegalArgumentException:
   ...PrintString, @ProcessElement processElement(KV, OutputReceiver), @ProcessElement processElement(KV, OutputReceiver):
   @Element argument must have type org.apache.beam.sdk.values.KV<java.lang.String, java.lang.Iterable<? extends java.lang.String>>
Run Code Online (Sandbox Code Playgroud)

果然,如果我替换Iterablejava.lang.Iterable,相同的代码就可以正常工作。我究竟做错了什么?

依赖版本:

  • 科特林-jvm: 1.3.21
  • org.apache.beam: 2.11.0

这是一个包含完整代码和堆栈跟踪的要点:

更新

经过一番反复试验,我发现虽然List<String>抛出了类似的异常但MutableList<String>实际上有效:

class PrintString: DoFn<KV<String, MutableList<String>>, String>() {
    @ProcessElement
    fun processElement(
        @Element input: KV<String, …
Run Code Online (Sandbox Code Playgroud)

kotlin google-cloud-dataflow apache-beam

10
推荐指数
1
解决办法
773
查看次数

当设置`noImplicitAny`时,Typescript忽略`typeRoots`

我通常设置我tsconfig.jsonstrict设置true.这意味着noImplicitAny也是如此true.但是,strict设置时,typescript似乎忽略typeRoots了本地创建*.d.ts文件的条目.这是tsconfig.json我使用的示例:

{
    "compilerOptions": {
        "declaration": true,
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "lib": [ "es2017" ],
        "module": "CommonJS",
        "noImplicitReturns": true,
        "outDir": "lib",
        "removeComments": true,
        "sourceMap": true,
        "strict": true,
        "target": "es2017",
        "typeRoots": [ "./typings", "./node_modules/@types" ],
        "types": [ "node" ],
    },
    "compileOnSave": true,
    "include": [ "./src/**/*" ]
}
Run Code Online (Sandbox Code Playgroud)

我可以在tsconfig.json上面添加以下内容,它将起作用:

{
    "compilerOptions": {
        ...
        "noImplicitAny": false,
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我创建的示例项目,用于说明此问题:

https://github.com/marcoslin/tstyping-test

知道为什么会这样吗?

typescript

8
推荐指数
1
解决办法
593
查看次数

使用url的ui-router延迟加载状态

我试图看看我是否可以使用ui-router通过实现状态的延迟加载将状态设置委托给我的应用程序的子组件.虽然我设法让延迟加载部分使用$state.go或等效,我无法使用URL工作.

例如,在启动时,我app将只设置以下两种状态:view1view2.当view1状态被加载时,它然后设置它自己的子状态:view1.profileview1.interest.从Gist看一下这个示例站点:

http://bl.ocks.org/marcoslin/raw/b59cfa9a9a44bde04f9f/

正如您将从上面的示例中看到的那样,View1Profile在启动时不是有效链接,但如果您单击它,它将加载view1然后加载view1profile生成的url:

http://bl.ocks.org/marcoslin/raw/b59cfa9a9a44bde04f9f/#/view1/profile

但是,如果您单击上面生成的URL,则app重新加载并不再了解view1profile并重定向您home.关于如何解决这个问题的任何建议?更具体地说,无论如何我可以获取触发$stateNotFound事件的URL 吗?

也许答案是他们关于如何:懒惰加载状态的神秘文档的一部分.我无法弄明白他们的意思:

  • 如何在事件上设置重试承诺
  • 如何使用存储的提供程序定义unfoundState并解析promise

javascript angularjs angular-ui-router

7
推荐指数
1
解决办法
2322
查看次数

由于 europe-west3 区域中的 ZONE_RESOURCE_POOL_EXHAUSTED,数据流作业失败

自今天早上 7 点以来,我的数据流作业一直失败,并出现错误:

europe-west3-c 区域中的工作人员池启动未能启动任何所需的 1 个工作人员。ZONE_RESOURCE_POOL_EXHAUSTED:实例“”创建失败:区域“projects//zones/europe-west3-c”没有足够的可用资源来满足请求。尝试不同的区域,或稍后再试。

我尝试在 中启动该作业europe-west3-aeurope-west3-b但遇到了同样的错误。已经超过 12 个小时了,但这个问题仍然存在。我知道这不是一般的资源可用性问题,因为我可以在该区域创建新的虚拟机而不会出现任何问题。

我什至向 Google 支持人员开放了案例,但不幸的是,他们甚至没有阅读我的票证,只是用标准回复来回复,要求我做我已经尝试过的事情。

知道我能在这里做什么吗?

更新1:

我尝试创造一个新的工作并且--worker-machine-type=e2-standard-2有效。问题似乎与他们的机器有关server-specified

更新2:

我们现在进入问题的第二天europe-west3。我们的开发环境是这样的europe-west1,不会出现这个问题。

google-cloud-platform google-cloud-dataflow

7
推荐指数
1
解决办法
1427
查看次数

PhoneGap 2.8.0使用angular-mobile-nav引发"无方法'overrideBackbutton'"

我在使用Ripple Emulator的Cordova 2.8 Android项目的最初页面加载时遇到了angular-mobile-nav的问题.我得到的错误是:

TypeError: Object #<Object> has no method 'overrideBackbutton'
    at module.exports.exec (chrome-extension://geelfhphabnejjhdalkjhgipohgpdnoc/ripple.js:40:22917)
    at backButtonChannel.onHasSubscribersChange (http://localhost:8076/cordova.js:1145:13)
    at Channel.subscribe (http://localhost:8076/cordova.js:667:49)
    at HTMLDocument.document.addEventListener (http://localhost:8076/cordova.js:132:34)
    at null.<anonymous> (http://localhost:8076/components/mobile-nav/mobile-nav.js:11:14)
    at Channel.fire (http://localhost:8076/cordova.js:709:23)
    at http://localhost:8076/cordova.js:232:47
Run Code Online (Sandbox Code Playgroud)

基本上,它是由mobile-nav.js第11行引起的:
document.addEventListener("backbutton", function() {

而来自第1145行的cordova.js电话引发的错误:
exec(null, null, "App", "overrideBackbutton", [this.numHandlers == 1]);

这是一个可以复制的问题吗?任何帮助将不胜感激.

angularjs cordova

4
推荐指数
1
解决办法
1076
查看次数

Google App Engine ndb在重复属性上的表现

如果我选择查询repeated属性,我是否会对查询性能支付罚金?例如:

class User(ndb.Model):
    user_name = ndb.StringProperty()
    login_providers = ndb.KeyProperty(repeated=true)

fbkey = ndb.Key("ProviderId", 1, "ProviderName", "FB")
for entry in User.query(User.login_providers == fbkey):
    # Do something with entry.key
Run Code Online (Sandbox Code Playgroud)

VS

class User(ndb.Model)
    user_name = ndb.StringProperty()

class UserProvider(ndb.Model):
    user_key = ndb.KeyProperty(kind=User)
    login_provider = ndb.KeyProperty()

for entry in UserProvider.query(
    UserProvider.user_key == auserkey,
    UserProvider.login_provider == fbkey
):
    # Do something with entry.user_key
Run Code Online (Sandbox Code Playgroud)

根据GAE的文档,似乎Datastore负责索引,而第一个不那么详细的选项就是使用索引.但是,我没有找到任何文件证实这一点.

编辑

UserProvider第二个示例的唯一目的是在用户和它的login_provider之间创建一对多关系.我想了解是否值得创建第二个实体而不是查询repeated属性.此外,假设我所需要的只是来自的关键User.

google-app-engine app-engine-ndb google-cloud-datastore

4
推荐指数
1
解决办法
1078
查看次数

如何垂直对齐div内的元素

我是一个HTML/CSS新手,而div中的元素垂直对齐让我发疯.基本上,我有一个div包含文本和图像的混合,我想要做的就是垂直对齐ediv中间的元素.

根据这篇文章:

内联元素(以及仅内联元素)可以通过vertical-align:middle在其上下文中垂直对齐.但是,"上下文"不是整个父容器高度,而是它们所在文本行的高度.

所以,我创建一个SPAN和事件集,diplay: inline但没有任何作用:

<div id="main_section" class="main_align" >
    <span class="inline">
        <span class="inline"><img src="http://placehold.it/50x50" /></span>
        &nbsp;
        <span class="small inline">A Very Small Text</span>
        &nbsp;
        <span class="medium inline">Medium String</span>
    </span>
</div>
Run Code Online (Sandbox Code Playgroud)

这是jsfiddle.

任何指针将不胜感激.

注意:如果在Chrome和Firefox中有效,我很高兴.无需解决IE特定问题.

html css

3
推荐指数
1
解决办法
1万
查看次数