Angular JS从过滤器访问控制器数据

时间:2015-08-18 11:28:24

标签: javascript json angularjs

我有JSON格式的数据,然后使用ng-repeat显示。我编写了一个过滤器,找到% simbol的位置,然后对字符串进行切片。现在我想在我的视图的ng-repeat中连接另一个字符串(field.FIELD6)。我已将控制器中的JSON数据添加到$rootScope,但不知道如何从此处继续。

有办法吗?过滤器是错误的方法,你会怎么做?

感谢您的帮助。

app.js:

'use strict';

angular
  .module('peroApp', [
    'ngAnimate',
    'ngCookies',
    'ngResource',
    'ngRoute',
    'ngSanitize',
    'ngTouch'
  ])
  .filter('klicaj', function() {
    return function(input) {
      var n = input.indexOf("%"); 
      var out = "";
      //if string doesn't contain %
      if(n === -1) {
        out = input;
      } 
      //if string contains %
      else {      
        out = input.slice(0, n);
        //CONCATENATE STRING HERE
      }
      return out;
    };
  });

main.html中:

<ul ng-repeat="field in live">
  <li> {{ field.FIELD1 }}</li>
  <li> {{ field.FIELD2 }}</li>
  <li class="url">{{ field.FIELD3 }}/{{field.FIELD4 | klicaj }}/{{ field.FIELD5 | klicaj }}</li>
</ul>

main.js:

'use strict';

angular.module('peroApp')
  .controller('MainCtrl', function ($rootScope) {   
    $rootScope.live = [
  {
    "FIELD1":2,
    "FIELD2":0,
    "FIELD3":"SCR",
    "FIELD4":"FT",
    "FIELD5":"1X2",
    "FIELD6":"",
    "FIELD7":"3way"
  },
  {
    "FIELD1":8,
    "FIELD2":1274,
    "FIELD3":"SCR",
    "FIELD4":"FTaI!5",
    "FIELD5":"ATTTL!2!%1$s",
    "FIELD6":"(\\d+.\\d+)",
    "FIELD7":"Asian total awayteam after 5 innings"
  }
    ];
});

1 个答案:

答案 0 :(得分:0)

您可以通过使用:

分隔的对象来扩充过滤器,从而将参数传递给过滤器

示例:如果要将控制器引用传递给过滤器klicaj

{{field.FIELD4 | klicaj:controllerRef }}

现在filter函数中的第二个参数是controllerRef。

您还可以向过滤器传递多个引用。