如何使用underscore.js从Ang-repeat中将Angular变量注入过滤器

时间:2014-02-08 22:07:24

标签: javascript angularjs underscore.js

好的,让我再试一次......

我有一个来自ng-repeat的值......就像这样:

<div class='span3 box box-nomargin' style="margin-left: 0px !important; padding-right: 20px;" ng-repeat="site in getSites">

这是“site.networkId”的值,我只需要获取网络的名称。

话虽如此,网络ID例如是:“2352wdfdsf23214”。

该名称位于另一个JSON数组中...所以我试图将此值传递给ANGULAR的FILTER,如下所示:

<span class="utilMonSmallText">{{ name | netNames:site.networkId }}</span>

名称是我需要的最终值,netNames,filter和site.networkId是我在上面的ng-repeat中的参数。

所以这是我的过滤器:

myApp.filter('netNames', function(myNetID)
{
    console.log("Inside NetNames Filter: " + myNetID);

    var networkName = _.filter(myNetID, function(name){ return name ==="name"; });

        return networkName;
});

所以,如果我有把手,我只是创建一个助手和噗,所需的结果将被渲染。角;不是那么容易,或者我可能没有看到它。

网络集合具有ID和NAME。我只想将NAME替换为传递给GET名称的ID。

简单;正确?

更新:这是我的控制器......

// getNetNames gets an array with all the network names in the database
$scope.getNetNames = dashboardData.getNetNames();
$scope.getNetNames.then(
        function(getNetNames) {

                $scope.getNetNames = getNetNames;
                $scope.netName = $.grep(getNetNames, function(n, i) { // just use arr

                    console.log("myName inside the topo getNetNames: " + n.myNetID)

                    return n.myNetID === "NAME";
                });

            console.log("get Names inside TOPO Ctrl: " + $scope.getNetNames);
        },
        function(response) {
            console.log(response);
        });

更新:这是我的服务

    getNetNames: function(netid) {
        var deferred = $q.defer();
            $http({method: 'GET', url: myNetsURL + "" + netid})
                    .success(function(data, status, headers, config) {
                        console.log("NETWORK Name: " + data);
                        //Push NET NAMES into array for use down below.
                        deferred.resolve(data);
                    })
                    .error(function(data, status, headers, config) {
                        deferred.reject(status);
                    });
        return deferred.promise;
    }

1 个答案:

答案 0 :(得分:2)

您没有以正确的方式将site.networkId传递到过滤器中:

myApp.filter('netNames', function() { // You can inject a service here
    return function(input, myNetID) { // the first parameter refers to "name" which is the json array that has the names
        console.log("Inside NetNames Filter: " + myNetID);

        var networkName = _.findWhere(input, {id: myNetID});

        return networkName.name;
    }
});

这假设具有名称的json数组位于$scope.name