小编Jac*_*ャック的帖子

如何公开公开角度2方法?

我目前正致力于将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,所以如果你有这方面的提示,那将是一个额外的奖励.(我有想法,但欢迎其他人.)

javascript angular

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

如何访问JSON对象中的数组?

您好我有以下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确实在控制台中正确显示.想法?

谢谢

javascript arrays jquery json object

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

为什么在通过AJAX发送数据时,您是否需要JSON.stringify()您的对象?

JSON代表javascript对象表示法(因为我确定你知道),所以为什么,当通过ajax发送json时你需要把它变成一个字符串来发送它吗?它只是一个格式化的东西,或者是什么?

这可能属于另一个地方,如果是这样,请告诉我,我会关闭它并移动它.

显然,我不是在寻找意见,我想知道实际的答案.

为了确保我清楚,我理解JSON.stringify()做了什么,以及它的对应JSON.parse().我只是想知道,为什么需要使用stringify.

谢谢!

javascript ajax json

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

Microsoft Edge easyXDM on("message")事件未被调用

在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)

javascript ajax cors easyxdm microsoft-edge

6
推荐指数
1
解决办法
481
查看次数

使用Systemjs时检测是否在页面上加载了Angular2

我试图找出一个好的(最好是最好的)方法来检测页面上是否加载了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(和正确版本)以及其他依赖项.如果不是,我们会动态添加他们没有的东西来满足我们的需求.(这种方法可能还有其他问题,但是当我们到达那里时我们将解决这些问题.)

摘要

  1. 我们需要检测页面上是否加载了角度,以及版本是什么.
  2. 使用systemjs,window.angular返回undefined.
  3. 角应用程序运行良好,没有问题.
  4. 使用http2,我们不认为不需要使用systemjs加载角度,但我们并不反对在必要时更改它.

javascript systemjs angular

5
推荐指数
1
解决办法
965
查看次数

如何通过 NPM 只安装 sass 版本的 bootstrap 而不是 JS

我正在开发一个项目,我们想要使用 bootstrap 的 CSS(通过 sass)而不是 JS。我通过 NPM 包含 bootstrap-sass 没有问题,但我不想要所有 JS 文件和 sass 文件,因为我们没有用它们。

我寻找过一个 NPM 包,它只是 bootstrap 的 sass 部分,没有 js,但没有成功。

假设没有包,NPM 有没有办法只安装包的一部分?如果是这样,我将不胜感激有关这样做的指示。

node.js npm twitter-bootstrap

2
推荐指数
1
解决办法
954
查看次数