我试图重构我的角度应用。因此,我介绍了一个包含工厂服务的service.js文件。代码是这样的:
#include <boost/property_tree/json_parser.hpp>
#include <fstream>
#include <iostream>
#include <map>
namespace {
using Element = std::map<std::string, int>;
struct Array : std::vector<Element> { };
Array read(std::string fname) {
std::ifstream ifs(fname);
Array into;
using namespace boost::property_tree;
ptree pt;
read_json(ifs, pt);
for (auto& entry : pt.get_child("values")) {
Element e;
for (auto& property : entry.second)
e[property.first] = property.second.get_value(0);
into.push_back(std::move(e));
}
return into;
}
}
int main() {
try {
auto array = read("input.json");
std::cout << "Parsed " << array.size() << " elements:\n";
for (auto& e : array) {
std::cout << "--------------------\n{ ";
for (auto& kv : e)
std::cout << "\"" << kv.first << "\": " << kv.second << ", ";
std::cout << " }\n";
}
} catch (...) {
std::cout << "Parsing failed\n";
}
}
在控制器中我称之为:
app.factory('Categorien', function() {
var Categorien = {
populate: function () {
var _categorien = [];
var bedragok = (function bedragOk(categorie) {
return categorie.bedragAf > 0;
});
var categorienFilter = $scope.categorien.filter(bedragok);
categorienFilter.forEach(function(item) {
var dataArray = [];
dataArray.push(item.omschrijving);
dataArray.push(item.bedragAf);
_categorien.push(dataArray);
});
return _categorien;
}
};
return Categorien;
});
因此dataTable需要一个函数populate应返回的数组。
我做错了所以我希望你可以帮助我。
谢谢!
答案 0 :(得分:0)
如果您只想进行过滤,我认为您可以使用自定义过滤器。然后你的代码看起来就像下面的演示一样。
如果您想使用工厂,可以将数组传递给您的填充函数$scope.dataTable = Categorien.populate(['your', 'array', 'here']);
,或者您可以使用其他方法将数据添加到工厂。正如评论中所提到的,$scope
不应传递给工厂。
以下演示(或此fiddle)展示了如何使用自定义过滤器:
angular.module('demoApp', [])
.controller('MainController', MainController)
.filter('categoryFilter', function() {
return function(input) {
var _categorien = [];
var bedragok = (function bedragOk(categorie) {
return categorie.bedragAf > 0;
});
var categorienFilter = input.filter(bedragok);
categorienFilter.forEach(function(item) {
var dataArray = [];
dataArray.push(item.omschrijving);
dataArray.push(item.bedragAf);
_categorien.push(dataArray);
});
return _categorien;
}
});
function MainController() {
this.data = [
{
bedragAf: 100,
omschrijving: 'test'
},
{
bedragAf: -100,
omschrijving: 'test neg. value'
},
{
bedragAf: 100,
omschrijving: 'test2'
}
];
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="demoApp" ng-controller="MainController as ctrl">
<pre>
raw:
{{ctrl.data | json : 2}}
filtered:
{{ctrl.data | categoryFilter | json : 2}}
</pre>
</div>
&#13;