小编Hom*_*rew的帖子

使用ui-router的'controller as'不能按预期工作

对于使用抽象状态和控制器作为语法的页面,我有以下状态设置:

# Details page route
.state 'title', 
  url: '/title',
  abstract: true,
  template: '<ui-view/>',
.state 'title.show', 
  url: '/:titleId',
  templateUrl: 'title/show.html'
  controller: 'Title as t'
Run Code Online (Sandbox Code Playgroud)

为了这个演示的目的,我可以说我将一个变量分配给'Title'控制器的't'实例,我在Title控制器函数中执行此操作.

angular.module('title').controller 'Title',
 ['$state', ($state) ->
   this.name = 'Test'
Run Code Online (Sandbox Code Playgroud)

在我的视图'title/show.html'中,我尝试打印出刚刚创建的变量到页面:

{{t.name}}
Run Code Online (Sandbox Code Playgroud)

我什么都没看到.但是,如果我将ui-router的控制器移到包含'title/show.html'页面的元素上,如下所示:

<div ng-controller="Title as t">
Run Code Online (Sandbox Code Playgroud)

一切都很好.有没有人遇到过这个问题.我在其他应用程序中工作正常,所以我仍然想弄清楚这个应用程序可能有什么不同,可能是js库版本的差异.

angularjs angular-routing angular-ui-router

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

将unix时间戳转换为twitter/facebook样式

我正在尝试将unix时间戳转换为facebook和twitter.例如,当您在Twitter/Facebook上看到推文或评论时,您会看到显示的日期/时间如下:

'2分钟前'或'2天前'或'2周前'

有没有人知道任何功能让它像这样工作.我猜这将是一个自定义的.

任何帮助深表感谢

php datetime timestamp unix-timestamp string-to-datetime

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

测试订阅了一个可观察的方法 - Angular 2

我想测试一个Angular 2组件内部的方法,该组件订阅了从服务中的方法返回的observable.以下是摘要中服务方法的代码:

public create(user: User): Observable<any> {
  return this.http.post(this._api.create,
    JSON.stringify(user), {
      headers: this.apiConfig.getApiHeaders()
    }).map((res: Response) => res.json());
  }
Run Code Online (Sandbox Code Playgroud)

单元测试这个方法很容易,因为它返回一个observable,所以我可以订阅它.但是我想测试已经订阅了这个的组件中的方法:

public onSubmit(user: User): void {
  this._authentication.create(user).subscribe((token) => {
    localStorage.setItem('token', token);
    this.router.navigate(['/Home']);
  });
}
Run Code Online (Sandbox Code Playgroud)

到目前为止我的规格是什么,但是当我试图窥探localStorage.setItem时,它回来时没有被调用.我的理解是它可能会检查它是否在实际被调用之前被调用过.

it('Should login a user and on success store a token in localStorage',
  injectAsync([TestComponentBuilder], (tcb) => {
    return tcb.createAsync(Login).then((fixture) => {
      let instance = fixture.debugElement.componentInstance;
      localStorage.clear();
      spyOn(localStorage, 'setItem');
      instance.onSubmit({userId: 'some@email.com', password: 'password', siteName: 'sample'});
      expect(localStorage.setItem).toHaveBeenCalled();
    });
  })
);
Run Code Online (Sandbox Code Playgroud)

我想知道我是否需要模拟this._authentication.create方法来返回一个带有模拟响应的新observable?

经过更多的研究,一些文章指出我确实需要模拟服务并返回一个同步运行以解决问题的Observable.of(),复制下面的代码.然而,这仍然不起作用,我一直在努力这一天,我不觉得这应该是那么难,任何帮助赞赏.

class MockAuthentication extends Authentication {
  public create(user: Object): …
Run Code Online (Sandbox Code Playgroud)

jasmine rxjs angular

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

将声明设置为TRUE时的Typescript错误

我正在尝试为我正在处理的Angular 2项目创建打字稿定义,以便它可以成为可导出的库.

我有几个服务设置,将http请求返回到组件,所有这些都与以下内容非常类似:

public create(user:User) {
  return this.http.post(this._apiUrls.create,
    JSON.stringify(user), {
      headers: this.apiConfig.getApiHeaders()
    });
}
Run Code Online (Sandbox Code Playgroud)

然后我从一个组件调用这样的东西:

Session.create(user).subscribe((res:Response) => {
  this.user = res.json().user
}); 
Run Code Online (Sandbox Code Playgroud)

这一切都正常,直到我在tsconfig文件中将'声明'变为true,以便我可以创建typescript定义文件.我的几个服务开始出现以下错误:

error TS4053: Return type of public method from exported class has or is using name 'Observable' from external module "node_modules/rxjs/Observable" but cannot be named.
Run Code Online (Sandbox Code Playgroud)

我大多理解这个问题,但我不知道解决方案.如果我将Observable导入服务,那么typescript linter将抛出错误,因为从技术上讲它没有在该文件中使用.

来自Angular 1这是我们在所有应用程序中采用的类似范例,以打破我们的代码,但也许我需要改变Angular 2中的方法?我已经看过很多其他的Angular 2示例,他们也以类似的方式完成了它.

typescript angular2-services angular

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

脚本标记内的Jade条件

我正在为jade模板添加一些Javascript,而我遇到的问题是代码重复,因为我无法在脚本标记内执行任何jade条件.反正在这周围,代码如下.

if streamingType == 'HLS_IOS'
    script
        :coffee(bare=true)
         window.$j = jQuery
         window.player = new HtmlPlayer $j('#wrapper')
         player._loadVideoAt '#{url}'
else
    script
        :coffee(bare=true)
        window.$j = jQuery
        window.player = new FlashPlayer $j('#wrapper'), '#{flashPlayerId}'
        player._loadVideoAt '#{url}'`
Run Code Online (Sandbox Code Playgroud)

javascript conditional node.js pug

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

Angular2 - 测试已调用注入的私有服务方法

首先,我理解我不应该测试私有方法,但是我觉得有时我应该测试是否基于某些逻辑调用了私有方法.

我正在围绕angular 2 http服务构建一个包装器服务,这样我就可以进行全局错误处理,而无需将代码写入每个http请求.

该类的一小部分样本如下:

export class ApiService {
  constructor(private http: Http, private error: Error, private apiConfig: ApiConfig) {}

  public get(url: string, options: RequestOptionsArgs={}): Observable<any> {
   return this.http.get(url, options).catch((error: any) => {
     this.error.dispatch(error);
     return error;
   });
  }
}
Run Code Online (Sandbox Code Playgroud)

如果我想测试get方法并使用Error响应模拟响应以便catch触发,我无法测试是否调用了error.dispatch方法,因为这是私有的.我不能窥探私人方法.

你可能会争辩说我真的只是测试'catch'被解雇了,如果它确实显然内部的方法会被触发但是这只会测试http服务本身.我想确保在发送'catch'时将error.dispatch添加为调用,如果由于某种原因它被其他开发人员删除则会失败.也许这是一种不好的测试方法?我接受其他建议.

我可以像这样模拟私人课程:

{ provide: Error, useClass: FakeError }
Run Code Online (Sandbox Code Playgroud)

但是ApiService类的蓝图保持不变,现在的FakeError服务仍然是私有的.在Java中,您可以自己创建实例并注入它,因为您拥有它可以访问它.我想我正试图找到一种方法在jasmine/typescript/angular2中做到这一点?

jasmine angular2-testing angular

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

字符串后的3个数字的正则表达式

我有一个问题,我的网站每个页面都有一个链接链接到不存在的其他联系表单.例如,在一个页面上它链接到contact_123.html,另一个contact_122.html,另一个contact_124.html等...我想对此进行查找和替换以更改任何contact_"任意3个数字".html以便联系html的.

有谁知道正则表达式这样做.干杯!

regex replace

0
推荐指数
1
解决办法
398
查看次数