我目前正致力于将Backbone项目移植到Angular 2项目(显然有很多变化),其中一项项目要求需要某些方法可以公开访问.
一个简单的例子:
零件
@component({...})
class MyTest {
private text:string = '';
public setText(text:string) {
this.text = text;
}
}
Run Code Online (Sandbox Code Playgroud)
显然,我可以<button (click)="setText('hello world')>Click me!</button>,我也想这样做.但是,我希望能够公开访问它.
像这样
<button onclick="angular.MyTest.setText('Hello from outside angular!')"></click>
Run Code Online (Sandbox Code Playgroud)
或这个
// in the js console
angular.MyTest.setText('Hello from outside angular!');
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,我希望该方法公开暴露,以便可以从angular 2应用程序外部调用它.
这是我们在骨干网上所做的事情,但我想我的Google foo不够强大,无法使用angular找到一个好的解决方案.
我们宁愿只公开一些方法并列出公共api,所以如果你有这方面的提示,那将是一个额外的奖励.(我有想法,但欢迎其他人.)
您好我有以下JSON对象:
[
{
"comments":[
{
"created_at":"2011-02-09T14:42:42-08:00",
"thumb":"xxxxxxx",
"level":1,"id":214,
"user_id":41,
"parent_id":213,
"content":"<p>xxxxxx</p>",
"full_name":"xx K"
},
{
"created_at":"2011-02-09T14:41:23-08:00",
"thumb":"xxxxxxxxxxxxx",
"level":0,
"id":213,
"user_id":19,
"parent_id":null,
"content":"<p>this is another test</p>",
"full_name":"asd asd asd asd asd"
}
],
"eee1":"asdadsdas",
"eee2":"bbbbb"
}
]
Run Code Online (Sandbox Code Playgroud)
这是来自一个$.ajax要求,我有成功....
success: function (dataJS) {
console.log(dataJS);
console.log(dataJS[eee1]);
console.log(dataJS.comments);
}
Run Code Online (Sandbox Code Playgroud)
问题是我无法访问JSON对象中的项目,即使dataJS确实在控制台中正确显示.想法?
谢谢
JSON代表javascript对象表示法(因为我确定你知道),所以为什么,当通过ajax发送json时你需要把它变成一个字符串来发送它吗?它只是一个格式化的东西,或者是什么?
这可能属于另一个地方,如果是这样,请告诉我,我会关闭它并移动它.
显然,我不是在寻找意见,我想知道实际的答案.
为了确保我清楚,我理解JSON.stringify()做了什么,以及它的对应JSON.parse().我只是想知道,为什么需要使用stringify.
谢谢!
在Microsoft Edge中,GET请求未运行.我已经逐步完成了代码运行的AJAX请求,并在回调中设置了一个断点.但是,代码永远不会到达回调.
我已经有一个带回调的.then()和.fail()设置,并尝试使用回调添加.done()和.always(),但回调函数中没有任何代码正在运行.
然后我检查了dev-tools中的网络选项卡,我根本找不到请求.似乎Edge由于某种原因没有关闭请求.
request = function(options, resolveScope) {
var deferred = $.Deferred();
corsHandler.makeRequest(options)
.done(this._wrap(function(response) {
deferred.resolveWith(resolveScope, [response]); //never gets here
}, this))
.fail(this._wrap(function(response) {
deferred.rejectWith(resolveScope, [response]); //never gets here
}, this));
return deferred;
}
Run Code Online (Sandbox Code Playgroud)
这就是上面的请求函数.
ajaxFunc = function(data, scope) {
return request({
url: '/path/to/server',
internalUrl: true,
method: 'GET',
datatype: 'json',
data: data
}, scope);
}
Run Code Online (Sandbox Code Playgroud)
这是用于发出该请求的实现.
(function() {
// set data var
return ajaxFunc(data, self)
.then(function(res) { console.log(res); }) //never gets here
.done(function(res) { console.log(res); }) //never gets here …Run Code Online (Sandbox Code Playgroud) 我试图找出一个好的(最好是最好的)方法来检测页面上是否加载了angular2.
我看了一下这个问题:检测AngularJS是否加载到当前页面的方法,但答案只是说明要使用window.angular,这是我尝试的第一件事(很久才找到答案.)好像是systemjs导致角度不在全局(窗口)范围内.
这是我的html文件的头部:
<script src="client/node_modules/angular2/bundles/angular2-polyfills.js"></script>
<script src="client/node_modules/systemjs/dist/system.src.js"></script>
<script src="client/node_modules/rxjs/bundles/Rx.js"></script>
<script src="client/node_modules/angular2/bundles/angular2.dev.js"></script>
<link rel="stylesheet" href="client/styles/main.css"/>
<script>
System.config({
packages: {
client: {
format: 'register',
defaultExtension: 'js'
}
}
});
System.import('client/app')
.then(null, console.error.bind(console));
</script>
Run Code Online (Sandbox Code Playgroud)
基于这个问题,以及我对http2的理解,我没有看到不使用systemjs的真正原因.
显然,我可能是错的,systemjs可能不是问题的原因; 无论如何,window.angular即使我正在看我的角度应用程序,也会返回undefined.
为了给你我们的用例,万一它有帮助,我们正在通过一个init文件加载一个角度应用程序,该文件将在其他网站上使用(在大多数情况下我们不控制页面.)我们希望我们的init文件是能够检测页面中是否已包含angular2(和正确版本)以及其他依赖项.如果不是,我们会动态添加他们没有的东西来满足我们的需求.(这种方法可能还有其他问题,但是当我们到达那里时我们将解决这些问题.)
摘要
window.angular返回undefined.我正在开发一个项目,我们想要使用 bootstrap 的 CSS(通过 sass)而不是 JS。我通过 NPM 包含 bootstrap-sass 没有问题,但我不想要所有 JS 文件和 sass 文件,因为我们没有用它们。
我寻找过一个 NPM 包,它只是 bootstrap 的 sass 部分,没有 js,但没有成功。
假设没有包,NPM 有没有办法只安装包的一部分?如果是这样,我将不胜感激有关这样做的指示。