在angularjs控制器内使用非角度外部js函数

时间:2015-02-10 09:18:50

标签: javascript angularjs

我还是刚刚接触过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

任何帮助?

1 个答案:

答案 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();

之后的分号