_.map和_.zip javascript语法错误

时间:2016-01-01 14:32:36

标签: javascript angularjs underscore.js

使用unexcore.js:

(_.map(_.zip([v,xs]),function(rs){return {a:rs[0],x:rs[1]}}))

给我一​​个语法错误

  

语法错误:表达式[( .map( .zip([v,xs]),function(rs){第34列处的标记'{'是意外的,期待[]]返回{a:rs [0],x:rs [1]}}))]从[{return {a:rs [0],x:rs [1]}}))]开始。

更多背景

<rect  ng-repeat="z in (_.map(_.zip([v,xs]),function(rs){return {a:rs[0],x:rs[1]}}))" x="{{z.x.x(z.a)}}%" y="{{z.y.y(z.a)}}"  width="{{z.x.w(z.a)}}" height="{{z.x.h(z.a)}}" style="fill:rgba({{z.x.s.r}},{{z.x.s.g}},{{z.x.s.b}},{z.x.s.a}})"/>

2 个答案:

答案 0 :(得分:0)

您不能在Angular绑定中使用这些方法。我建议您使用它们来处理控制器中的数据,并使用ng-repeat来迭代处理过的数据。或者,如果您经常使用它们,您可以制作包围它们的Angular过滤器。

答案 1 :(得分:0)

&#13;
&#13;
angular
  .module('app', [])
  .controller('lodashUsageController', lodashUsageController);


function lodashUsageController($scope) {
  $scope._ = _;
  $scope.list = [1, 2, 3, 4, 5, 6];
  $scope.even = function(item) {
    return {
      val: item,
      isEven: item % 2 === 0
    };
  }
}
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.8/angular.js"></script>

<div ng-app="app">
  <div ng-controller="lodashUsageController">
    <ul>
      <li ng-repeat="item in _.map(list, even) track by $index">
        {{item.val}} - {{item.isEven}}
      </li>
    </ul>
  </div>
</div>
&#13;
&#13;
&#13;

正如Jon Snow所说,不建议直接在ng-repeat中使用lodash函数。

话虽如此,有办法做到这一点。我创建了这个jsbin example来演示它。

基本上,你需要做的是揭露&#34; _&#34;作为$ scope变量(因此角度绑定可以访问它)。

$scope._ = _;

您无法在绑定中使用直接匿名函数,尝试在控制器中创建它们,然后从ng-repeat中访问它。

HTML

  <div ng-controller="lodashUsageController">
<ul>
  <li ng-repeat="item in _.map(list, even) track by $index">
    {{item}}
  </li>
</div>

的javascript

function lodashUsageController($scope) {
  $scope._ = _;
  $scope.list = [1, 2, 3, 4, 5, 6];
  $scope.even = function(item) {
    return item % 2 === 0;
  }
}