我还是刚刚接触过angularJs。
我需要从angularjs控制器中的linqjs访问Enumerable类。
我的ngController看起来与此类似:
var app1= angular.module("app1");
app1.controller("peopleController", ['$scope', 'Restangular',
function($scope, Restangular) {
$scope.people = Restangular.all('people').getList()
$scope.selectedItem = Enumerable.From(people).FirstOrDefault(); // ERROR
}]);
我得到的错误是:
ReferenceError:未定义Enumerable
任何帮助?
答案 0 :(得分:1)
我认为应该是:
var app1 = angular.module("app1");
app1.controller("peopleController", ['$scope', 'Restangular', function ($scope, Restangular) {
$scope.people = Restangular.all('people').getList();
$scope.selectedItem = Enumerable.From(people).FirstOrDefault(); // ERROR
}]);
所以没有'peopleController'这个函数的名字。
修改强>
问题是Enumerable(在linqjs中定义)在被调用时不可用。因此,注入器正在寻找它和Enumerableprovider,但它不存在也不是注入。
您希望确保在运行应用程序之前加载linqjs源。如果在全局范围内定义了Enumerable,则可以在控制器中使用它。我创建了一个JsFiddle,它从CDN加载角度和linqjs,并向您显示它将从您的控制器“正常工作”:http://jsfiddle.net/ngn3Lprx/2/
var app = angular.module('myapp', []);
app.controller('myctrl', ['$scope', function ($scope) {
// Example from: http://linqjs.codeplex.com/
var jsonArray = [
{ "user": { "id": 100, "screen_name": "d_linq" }, "text": "to objects" },
{ "user": { "id": 130, "screen_name": "c_bill" }, "text": "g" },
{ "user": { "id": 155, "screen_name": "b_mskk" }, "text": "kabushiki kaisha" },
{ "user": { "id": 301, "screen_name": "a_xbox" }, "text": "halo reach" }
]
// ["b_mskk:kabushiki kaisha", "c_bill:g", "d_linq:to objects"]
$scope.queryResult = Enumerable.From(jsonArray)
.Where(function (x) { return x.user.id < 200 })
.OrderBy(function (x) { return x.user.screen_name })
.Select(function (x) { return x.user.screen_name + ':' + x.text })
.ToArray();
}]);
有了观点:
<div ng-app="myapp">
<div ng-controller="myctrl">
<pre>
{{ queryResult | json }}
</pre>
</div>
</div>
给出:
[
"b_mskk:kabushiki kaisha",
"c_bill:g",
"d_linq:to objects"
]
正如所料。
P.S。不要忘记.getList();