关于AngularJS小提琴的解释

时间:2014-06-16 14:38:50

标签: javascript angularjs

我对这个小提琴有几个疑问:

Fiddle

这是这个小提琴的Javascript代码,我有一些问题:

function Main() {
    this.friends = [{
        name: 'John',
        phone: '555-1212',
        age: 10,
        date: '11 June 2011'},
    {
        name: 'Mary',
        phone: '555-9876',
        age: 19,
        date: '12 June 2011'},
    {
        name: 'Mike',
        phone: '555-4321',
        age: 21,
        date: '13 July 2011'},
    {
        name: 'Adam',
        phone: '555-5678',
        age: 35,
        date: '14 May 2011'},
    {
        name: 'Julie',
        phone: '555-8765',
        age: 29,
        date: '15 June 2011'}];
}

Main.prototype = {

    sort: function(item) {
        if (this.predicate == 'date') {
            return new Date(item.date);
        }
        return item[this.predicate];
    },

    sortBy: function(field) {
        if (this.predicate != field) {
            this.predicate = field;
            this.reverse = false;
        } else {
            this.reverse = !this.reverse;
        }
    },

    reverse: false
};

1)我注意到小提琴的作者使用函数作为Controller而不是使用app.controller(...),然后使用[controller].prototype。是否建议使用这种方法?我知道我不能问哪种方式更好,因为我有一些与个人风味有关的感觉。

2)在sort函数中,我看到(关键)字predicate。这是什么意思?这是从哪里来的?我以前从未见过这个。

3)在这个小提琴的HTML部分,我注意到这一行:ng:repeat="friend in friends.$orderBy(sort, reverse)。一个不那么困难的行,但不熟悉语法$orderBy()表示法。你总是可以使用这种方法吗?这种方法来自哪里?

2 个答案:

答案 0 :(得分:2)

使用该模式时非常有用。在进行一些棘手的数据建模或控制器继承时,该模式非常有用。虽然,大多数时候我个人使用阵列DI模式。

Minko's Blog Post应该清理一下。另请注意,标题为" Explicit Dependecy Injection"有人在这个小纸条中滑倒了:"最佳实践:使用上面显示的数组注释。"

PS:我见过有人将一个resolve函数添加到控制器的末尾。然后使用$ routeProvider在app.config中调用该resolve函数 - (它更清晰但更令人困惑。正如@Sergey Moiseev指出的那样,如果你是一名顾问,那么你可能更倾向于可读性方面但是,如果你有一个开发团队,那么你们可以坐下来谈谈。

答案 1 :(得分:1)

1)这种方法很糟糕,因为你无法在控制器中访问依赖注入,而在现实世界中使用它会毫无用处。但对于快速而肮脏的演示,它有点有用。

2)谓词来from here

3)如果你看{4},你会看到过滤器和orderBy是角度内部过滤器。如果你看herehere,你会看到没有这样的符号。它可以工作,但它可能随时停止工作,它只能起作用,因为滥用了实施的副作用。所以它破坏了惯例。似乎不需要。对你或我这样的人很难理解。

从我的角度来看,这只是糟糕的代码。最好是遵守惯例和最佳实践,而不是实现这样的事情。