虽然类似于这个问题,但我不是问:
在什么条件下,分机的ID会发生变化?
也不
如何将我的zip存档上传到Chrome控制台?
不过我问,如何在不使用Chrome控制台的情况下获取扩展程序的密钥.因此,我不认为这是这个问题的重复.
在Chrome扩展程序中使用Google身份的文档说明需要将扩展程序的密钥复制到其清单文件中.
要使应用程序ID保持不变,您需要将已安装的manifest.json中的密钥复制到源清单.
但是,当导航到推荐目录(... Google/Chrome/Default/Extensions)时,我看不到解压缩扩展名的ID.我意识到这是因为扩展名没有安装为.crx文件.但是,为了开发目的,文档清楚地写了:
将已安装的manifest.json中的密钥复制到源清单,以便您的应用程序ID在开发期间保持不变.
如何在每次更改时避免打包扩展程序并重新安装?如果我的开发扩展没有安装的清单文件,我可以从中获取扩展的密钥,我在哪里可以获取它?
我在Visual Studio Code中使用pylint来开发Python中的Google App Engine(GAE)Cloud Endpoint API.我无法解决lint错误.我不知道是什么导致了错误,但是猜测,pylint找不到库?protorpc
故障排除Linting中的建议修复是将工作空间设置配置为指向完全限定的python可执行文件.我已经这样做了,但皮棉错误仍然存在.
protorpc 本身安装到:
~/google-cloud-sdk/platform/google_appengine/lib/protorpc-1.0/protorpc
Run Code Online (Sandbox Code Playgroud)
...这包含remote.py无法导入的模块:
__init__.py generate_python.py protojson.py transport.py
definition.py google_imports.py protourlencode.py util.py
descriptor.py message_types.py registry.py webapp
generate.py messages.py remote.py wsgi
generate_proto.py protobuf.py static
Run Code Online (Sandbox Code Playgroud)
我已将此路径添加到$PYTHONPATH(与厨房水槽一起):
export GOOGLE_CLOUD_SDK=~/google-cloud-sdk
export APPENGINE_PATH=$GOOGLE_CLOUD_SDK/platform/google_appengine
export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK
export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK/lib
export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK/lib/googlecloudsdk
export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK/lib/googlecloudsdk/api_lib
export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK/platform/google_appengine/lib
export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK/platform/google_appengine/lib/protorpc-1.0/protorpc
Run Code Online (Sandbox Code Playgroud)
应用程序在本地运行,也在部署时运行,因此这似乎只是一个lint错误,但令人沮丧的是我无法解决它.
使用第三方库声明:
标准环境中的Python运行时包括Python标准库,App Engine库和一些捆绑的第三方软件包.
因此,我认为 "App Engine库"包括protorpc,但我不确定.此外,将Cloud Endpoints Frameworks库添加到示例API …
如果Backbone View在其render()方法中创建新视图,那么这些视图是否应该作为数据成员维护?典型的渲染方法如下所示:
render: function() {
var myView = new MyView({ model: values });
$('div#value', this.el).append(myView.render().el);
}
Run Code Online (Sandbox Code Playgroud)
这种渲染方法的链接意味着嵌套的视图实际上只是创建,因此它也可以链接任何渲染方法并返回一个构造良好的元素.我假设视图留给垃圾收集?
如果要修改嵌套视图......可能很重要,是应该(重新)创建,还是应该通过数据成员引用进行修改?
我遇到的问题是嵌套的视图接收事件,要求他们修改自己的嵌套视图,有时他们的父视图.
我真的不想在各地开始投掷听众.传递对父视图的引用并从子视图调用render()会导致内存泄漏,因为父视图会创建一个新的子视图,而原始子视图会维护对其父视图的引用!
目前它不像框架那样.有没有人有任何资源可以帮助我以类似框架的方式解决这个问题?
我试图按照这个SO答案解释如何使用指令呈现递归JSON结构.然而,与提供的答案,我的数据是不是在DOM加载和运行的角度,第一次知道.
相反,我的数据从HTML输入字段中检索并存储在Angular Service中(当用户提交表单时).
在修改服务数据时,如何使Angular Directive保持最新状态?
更新以回应答案
@musically_ut提供了一个很好的答案,但是却揭示了一个相关的问题,阻止了一个实现(在这里更新).
该指令呈现包含Angular的HTML,该Angular {{expressions}}访问存储在其中的数据$scope.因为最初的解决方案是$watch当服务准备好数据时.如何在指令渲染$scope 之前确保添加"新"数据?
架构和流程概述如下:
ControllerA - >从用户那里获得输入 ControllerA- >使用服务转换数据ControllerB- > $watch更改服务Directive- > $watch更改服务ControllerB - >添加数据 $scopeDirective- > 使用指令显示转换后的数据(来自服务)
问题出在步骤5和6之间.指令{{expressions}}在ControllerB添加数据之前呈现$scope.即使这确实有效,但感觉太复杂和"hacky".
实际上,为了回归,我正在使用$watchControllerB来监听转换后的数据何时在服务中准备就绪.即使这感觉有点矫枉过正(该服务不会进行异步调用).
我已经为模拟器构建了Android源代码.我在Android Source文档中读到,在成功构建期间会自动添加"模拟器"的路径.但是我有两个问题:
如果我打开一个新shell或关闭我现有的shell,则不再找到"模拟器".当然我每次想要运行模拟器时都不需要构建?
如果模拟器需要AVD,我如何创建和管理这些,因为我的机器上没有Android SDK?
谢谢,杰克
第2部分的解决方案.
我需要创建一个名为ANDROID_PRODUCT_OUT的环境变量.从以下命令:
emulator -help-build-images
Run Code Online (Sandbox Code Playgroud)
我读...
通过查看环境中的ANDROID_PRODUCT_OUT变量,模拟器检测到您正在使用Android构建系统.
如果已定义,则应指向包含生成的系统映像的特定于产品的目录.
然后我在'out'目录中搜索'system.ing'.因为我正在为模拟器构建图像所在:
out/target/product/generic
Run Code Online (Sandbox Code Playgroud)
我将以下行添加到我的.bashrc文件中:
export ANDROID_PRODUCT_OUT=/home/jack.wootton/code/out/target/product/generic
Run Code Online (Sandbox Code Playgroud)
然后我能够从以下位置运行模拟器:
/home/jack.wootton/code/out/host/linux-x86/bin
Run Code Online (Sandbox Code Playgroud)
第1部分的解决方案.
我不知道Android虚拟设备,所以这个问题仍然存在 - 但是在成功构建并设置ANDROID_PRODUCT_OUT环境变量之后,我不需要提供一个来运行模拟器.
更新解决方案
显然,应该在构建期间使用envSetup.sh脚本自动创建ANDROID_PRODUCT_OUT等变量.我想我的环境设置出了问题就是没有发生.
Angular的GitHub页面显示了与Material Design相关的两个固定存储库:
该README.md对角/材料的标题为AngularJS应用材料设计.
我使用的是建立一个Angular2 Web应用程序的角度,CLI,并都安装并进口 @angular/material到app.module.ts.
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { HttpModule } from '@angular/http';
import { MaterialModule } from '@angular/material'
import { FlexLayoutModule } from '@angular/flex-layout'
@NgModule({
declarations: [
AppComponent,
],
imports: [
BrowserModule,
HttpModule,
FlexLayoutModule,
MaterialModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule …Run Code Online (Sandbox Code Playgroud) 如果我将一个项目添加到Collection中,如何找到添加它的位置?用于添加的Underscore.js文档表明,实现此目的的唯一方法是绑定到add事件.
还有其他方法吗?如果没有,那我怎样才能从我的回调中重新索引索引?我尝试提供回调:
foo:function(model, options) {
console.log("foo: " + options.index);
},
Run Code Online (Sandbox Code Playgroud)
但是options.index是undefined.我用这段代码绑定到事件:
this.collection.bind('add', this.foo);
Run Code Online (Sandbox Code Playgroud)
并使用以下代码添加项目:
this.collection.add(myNewItem);
Run Code Online (Sandbox Code Playgroud)
该系列中的模型是:
MyModel = Backbone.Model.extend({
defaults : {
key:undefined,
myObj:undefined,
},
Run Code Online (Sandbox Code Playgroud)
该系列是:
MyModel List = Backbone.Collection.extend({
model: MyModel,
initialize: function() {
this.comparator = function(aModel) {
return aModel.get('key');
};
}});
Run Code Online (Sandbox Code Playgroud)
我将模型添加到集合中:
var key = "always_the_same";
var mm = new MyModel({key:key});
this.collection.add(mm);
var index = this.collection.sortedIndex(mm , this.collection.comparator));
Run Code Online (Sandbox Code Playgroud)
问题是(我认为),比较器函数用于indexOf和sortedIndexOf,因此,就比较器函数而言,具有相同键的两个对象实际上是相同的对象.
我曾希望*CID将用于确保对象实际上是我在已经排序的集合中寻找的对象.但似乎没有.我想一个可能的解决方案是更改我的比较器功能以包含CID:
initialize: function() {
this.comparator = function(aModel) {
return aModel.get('key') + aModel.cid; …Run Code Online (Sandbox Code Playgroud) 当使用valueChanges订阅Angular Abstract Control中的更改时,是否有必要?unsubscribe()
我经常这样做:
// this.form is a FormGroup within a Component.
this.form.valueChanges.subscribe(_ => {
console.log(this.form.value);
});
Run Code Online (Sandbox Code Playgroud)
但是我应该自己管理订阅吗(就像我通常所做的ngrx那样)?:
import { Subscription } from 'rxjs';
// this.subscription is ngrx Subscription.
this.subscription = this.form.valueChanges.subscribe(_ => {
console.log(this.form.value);
});
public ngOnDestroy() {
if (this.subscription) {
this.subscription.unsubscribe();
}
}
Run Code Online (Sandbox Code Playgroud)
我之前没有这样做的唯一原因是因为关于 Angular Forms 的教程、示例和文档通常会省略存储对订阅的引用,而是按原样使用valueChanges。
相反,ngrx 教程似乎强调了取消订阅以避免内存泄漏的重要性。
这个问题有一个Stackblitz:stackblitz.com/edit/angular-material-starter-template-8ojscv。
我已经实现了一个包装CodeMirror的自定义 Angular Material FormField。
在我的应用程序组件中,我订阅表单控件上的valueChanges以监听用户键入:
export class AppComponent implements OnInit {
// Custom value accessor for CodeMirror.
control: FormControl = new FormControl('', {updateOn: 'change'});
ngOnInit() {
// Listen for the user typing in CodeMirror.
this.control.valueChanges.pipe(
debounceTime(500),
distinctUntilChanged(),
tap((value: string) => {
console.log(`The user typed "${value}"`);
})
).subscribe();
}
}
Run Code Online (Sandbox Code Playgroud)
我注意到,当使用setValue时,valueChanges Observable 会发出一个值,即使选项对象禁止它:
// This appears to have no effect.
this.control.setValue(value, {
// Prevent the statusChanges …Run Code Online (Sandbox Code Playgroud) 我在Angular 2应用程序中使用Google的reCAPTCHA v3来防止自动表单提交.当用户与UI交互时,我的应用程序在后台进行许多网络调用.
从index.html,我做了一个故意阻塞调用来加载库(防止Angular世界在recaptcha/api.js加载之前进入):
<script src="https://www.google.com/recaptcha/api.js?render=reCAPTCHA_site_key"></script>
Run Code Online (Sandbox Code Playgroud)
从Angular Service的构造函数中,我使用DOCUMENT DI令牌来引用grecaptcha对象:
constructor(@Inject(DOCUMENT) private document: any) {
this.grecaptcha = this.document.grecaptcha;
}
Run Code Online (Sandbox Code Playgroud)
一旦应用程序被加载(使用生命周期钩子),前面提到的Angular服务调用grecaptcha.execute获取唯一token(根据前端集成指南):
public executeCaptcha() {
this.grecaptcha.ready(() => {
this.grecaptcha
.execute(MyService.CAPTCHA_KEY, {
action: 'execute'
})
.then((token: string) => this.token = token);
});
}
Run Code Online (Sandbox Code Playgroud)
它token是回调的参数,并存储为Angular service(this.token = token))的成员.
此时,应用程序没有对我的后端进行任何API调用,也没有将用户验证为人.
angular ×4
backbone.js ×2
javascript ×2
android ×1
angularjs ×1
ngrx ×1
observable ×1
open-source ×1
protorpc ×1
python ×1
python-2.7 ×1
recaptcha ×1
rxjs ×1
typescript ×1