【问题标题】:Angular Js FactoryAngular Js 工厂
【发布时间】:2015-05-07 04:28:15
【问题描述】:

我有工厂的工作版本

function queryStaticDatabase (filterCondition, url, callback)
{ // should make server REST call in real scenario
    console.log(filterCondition);
    var recordsPerPage = filterCondition.recordsPerPage;
    var pageNumber = filterCondition.pageNumber;

    $http.get(url).success(function (data) {

                 console.log(data);
        callback({ // ajax callback in real scenario
            totalRecordsCount: totalRecordsCount,
            records: filteredData
        });

    });
}

return {
    query: queryStaticDatabase
}

我尝试通过以下方式更改代码

    var query =
       function (filterCondition, url, callback) { // should make server REST call in real scenario
           console.log(filterCondition);
           var recordsPerPage = filterCondition.recordsPerPage;
           var pageNumber = filterCondition.pageNumber;
           $http.get(url).success(function (data) {



               callback({ // ajax callback in real scenario
                   totalRecordsCount: totalRecordsCount,
                   records: filteredData
               });
           });

       };
    return (query);
});

虽然看起来语法正确。修改后的工厂不工作。我是 AngularJs 的新手,请帮我解决这个问题

【问题讨论】:

    标签: angularjs factory angularjs-factory


    【解决方案1】:

    如果你没有改变你在控制器中使用工厂的方式,那么返回对象结构是不同的。

    在第一个版本中,您返回一个具有属性query 的对象,因此您可以使用myFactory.query()

    第二个你只返回函数,所以它在控制器中是myFactory()

    如果您希望控制器中的内容相同,则需要更改

    return (query);
    

    return{
       query : query
    }
    

    返回带有属性的对象允许您稍后将属性添加到工厂,而无需更改控制器中的任何内容,而现在更改控制器以仅查看功能不会使其在未来易于扩展

    【讨论】:

    • +1。谢谢它工作。它更多的是在理解部分。我还有一个问题。正如您所解释的,在第二个版本中,我将返回该函数。根据工厂的定义,它听起来很完美。但是对于您提到的第一点,我正在返回一个具有属性查询的对象。请您解释一下。我是新手,想更好地理解它
    • 对象字面量 ==>{propertyName: value} 。这样做的好处是可以在不影响其他地方的代码的情况下添加属性
    • 谢谢。还有一件事我无法清楚理解的是,从 c# 的角度来看,为什么我们需要通过这种按属性调用的方法,而不是直接调用 queryStaticDatabase。有没有好的文章可以让我阅读并理解它?
    • 因为继承
    • 对不起查理。没找到你:(
    猜你喜欢
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多