从Angular.js中的视图修改方法中的数据的最佳实践

时间:2013-11-07 19:24:41

标签: javascript angularjs angularjs-service

我正在编写一个角度应用来显示可以使用bootstrap collapse accordions打开和关闭的报告。我决定在手风琴的报告对象中添加一些特定于视图的值,如下所示:

var report = [{
    "testName": "Cool Test",
    "successful": true,
    "openAccordion": "in" //this was added for bootstrap's sake to say whether this test in the report is collapsed or not
}]

我认为这样我就可以更新我的模型,双向数据绑定将为我崩溃和解开。

我现在要做的是,我想添加执行此操作的按钮。例如,我想要一个按钮,将报告中的所有测试设置为"openAccordion":"in"以打开所有测试,另一个按钮将它们设置为"openAccordion":""以关闭所有测试。

我发现我可以编写一个像这样挂起功能的服务:

bookApp.factory('report', function() {

    this.getReport = function() {
        [...]
        return report;
    }

    this.setAccordions = function(report, setting) {
        [set all tests to setting's value ...]
    }

    return this;

});

我想我喜欢这样,但是那么使用ng-click关闭setAccordions功能的最佳方法是什么?我是否必须将该服务功能设置为我$scopeReportCtrl的功能,或者我可以直接从视图中调用该功能吗?

1 个答案:

答案 0 :(得分:1)

您可以直接调用工厂函数,但首先控制器必须将其绑定到控制器的范围:

myApp.controller('Ctrl', function ($scope, report) { 
    $scope.setAccordions = report.setAccordions;
}

然后你可以使用:

<button ng-click="setAccordions(true)">Set to true </button>