2016-05-26 8 views
1
  1. myFilter$scope.currentLanguageIdEnglish()またはFrance()関数値を呼び出した後に変更されないのはなぜ?
  2. フィルタでサイトのローカライズを行うのは通常の方法ですか?または既存のより一般的な方法かもしれません?

一覧:Angularjs言語ローカリゼーション

<div ng-init="GetList()"> 
    <div ng-repeat="item in items | filter: myFilter"> 
     {{item.Text}} {{item.LanguageId}} 
    </div> 
</div> 

メニュー:

<div class="menu"> 
    <ul> 
     <li><a href="#/about">About</a></li> 
     <li><a href="#/contacts">Contacts</a></li> 
     <li><a>Test</a></li> 
     <li><a>Test</a></li> 
     <li><a>Test</a></li> 
     <li><input type="button" value="En" ng-controller="homeController" ng-click="English()" /></li> 
     <!--<li><a>En</a></li> 
     <li><a>Fr</a></li>--> 
    </ul> 
</div> 

コントローラ:私はそのためのサービスを作成し、$のrootScopeに添付します

app.controller('homeController', function ($scope, $http) { 
    $scope.items = []; 
    $scope.currentLanguageId = ''; 
    $scope.GetList = function() { 
     $http({ 
      method: 'GET', 
      url: '/Home/GetList', 
      params: { languageId: '1'} 
     }).then(function successCallback(response) { 
      $.each(response.data, function (id,item) { 
       $scope.items.push({ Text: item.Text, LanguageId: item.LanguageId }); 
      }); 
    }, function errorCallback(response) { 
     alert('Error'); 
    }); 
    } 
    $scope.English = function() { 
     $scope.currentLanguageId = '2'; 
    } 
    $scope.France = function() { 
     $scope.currentLanguageId = '3'; 
    } 
    $scope.myFilter = function (item) { 
     console.log($scope.currentLanguageId); 
     return item.LanguageId == $scope.currentLanguageId; 
    }; 
}); 
+0

私は個人的にあなたが見てみることができると思う角度翻訳(i18n)を使用しています:https://angular-translate.github.io/ – thepio

答えて

1

DEMO それは毎回利用可能ですどこ私のアプリケーションで、その後

var app = angular.module('app', []); 

app.run(function(langService){ 

    langService.fetch('spanish'); 

}); 

app.controller('MainController', function(){ 

    var vm = this; 

}); 

app.service('langService', function($rootScope){ 

    this.current = {}; 

    this.fetch = function(lang){ 

    //do your fetching here with $http 
    $rootScope.lang = { 

     ok: 'si', 
     yes: 'si', 
     no: 'no' 

    }; 

    }; 

}); 

はあなたが指摘する価値

<button>{{$root.lang.ok}}</button> 
<button>{{$root.lang.no}}</button> 

他のもののようにアプリ内のどこにでもそれを使用することができ、各コントローラに注入する必要はありません。

  • コントローラが太すぎる、コントローラにロジックを置くべきではない、ロジックがサービスにあるべきである
  • 可能な限りng-initを使用しないでください、コントローラの中でそれを行う
関連する問題