2015-06-02 79 views
7

我有以下情況(在服務翻譯過濾器,在HTML文件中使用)AngularJS編程調用從服務過濾器(通過自定義過濾器排序)

// serviceFile 
 
angular.module('myModule') 
 
    .service('translation') 
 
    .filter('translate', function(translation) { 
 
    // translate stuff 
 
    return 'translatedString'; 
 
    }); 
 

 
// controllerFile 
 
angular.module('myModule') 
 
    .controller('StringsController', function(blabla, translation) { 
 
    $scope.mySort = function() { 
 
     return "some magic should happen here"; 
 
    }; 
 
    }); 
 

 
// htmlFile 
 
<tr ng-repeat="string in strings"> 
 
    <td> 
 
     {{ string | translate: 'name' }} 
 
    </td> 
 
</tr>

(該上面的代碼工作,但也許一些重要的部分被省略,由於我缺乏經驗)

我的問題是,我被要求根據翻譯的值進行排序(類似string in strings | orderBy: mySearch),我可以' t找到如何從StringsController.mySearch

P.S.以編程方式調用過濾器。該過濾器不從服務返回的(不知道這是有關)

+0

你需要注入_ $ filter_並使用它像'$ filter('translation')(params)' – Grundy

+0

@Grundy,你能給我一個新手鍊接嗎?我只使用非常基本的angularjs,服務甚至不是我的代碼。我甚至不知道我是否應該將其注入控制器或服務中? – norb

+0

另見[guid for filters](https://docs.angularjs.org/guide/filter) – Grundy

回答

3

你可以看到guide for filters

所以你的情況從defininition .filter('translate',取決於您可以使用它像

.controller('StringsController', function(blabla, $filter) { 
    //simple transtale 
    var translatedString = $filter('translate')(stringForTranslate); 

    //ordering 
    var ordered = $filter('orderBy')(arrayForOrdering,function(el){ return $filter('translate')(el); }) 

}); 
+0

我添加了$ scope.mySearch = function(string){return $ filter('translate')(string) ; }到控制器,以及$ fitler在開始...我唯一的問題是如何去'名稱'... btw感謝您的幫助到目前爲止.. – norb

+0

你能提供一個複雜的樣本?可能與[jsfiddle](http://jsfiddle.net/)或[plunker](http://plnkr.co/edit/),在這裏顯示一個基本的方法,你如何過濾和訂購你的控制器 – Grundy

+0

做了jsfiddle我發現解決方案...必須修改爲$ filter('translate')(stringForTranslate,'name');謝謝你的所有幫助 – norb