2016-08-25 130 views
1

我已附加plunker链接。角度翻译不working.View不更新时,我在appendChild添加html

这是我的HTML

<!doctype html> 
<html ng-app="myApp"> 

<head> 
    <meta charset="utf-8"> 
    <title>AngularJS Plunker</title> 
    <script> 
    document.write('<base href="' + document.location + '" />'); 
    </script> 

    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.js"></script> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular-cookies.js"></script> 
    <script src="https://rawgithub.com/angular-translate/bower-angular-translate/master/angular-translate.min.js"></script> 
    <script src="https://rawgithub.com/angular-translate/bower-angular-translate-storage-cookie/master/angular-translate-storage-cookie.js"></script> 
    <script src="https://rawgithub.com/angular-translate/bower-angular-translate-loader-static-files/master/angular-translate-loader-static-files.js"></script> 
    <script src="app.js"></script> 
</head> 

<body ng-controller="someController"> 
    <div id="parent"> 
    <h1>{{'HEADLINE' | translate }}</h1> 
    <button ng-click="switchLanguage('de_DE')" translate="LANG_DE_DE"></button> 
    <button ng-click="switchLanguage('en_US')" translate="LANG_EN_US"></button> 
    <button id="myButton" class="float-right submit-button" ng-click="showDiv()" >Click here</button> 
    </div> 

<script type="text/javascript"> 

</script> 
<div id="hello"> 

<span name="new" id="newpage" style="display: none;"> 
    <h1 class="xx">{{'HELLO'| translate }}</h1> 
    </span> 
    </div> 
</body> 

</html> 

app.js

angular.module('myApp', ['pascalprecht.translate', 'ngCookies']); 

angular.module('myApp').config(['$translateProvider', 
    function($translateProvider) { 
    var language = (window.navigator.userLanguage || window.navigator.language).toLowerCase(); 
    console.log(language); 
    $translateProvider.registerAvailableLanguageKeys(['de_DE', 'en_US'], { 
    'en_US': 'en_US', 
    'en_UK': 'en_US', 
    'en': 'en_US', 
    'de': 'de_DE' 
    }); 

    $translateProvider.useStaticFilesLoader({ 
     prefix: 'lang_', 
     suffix: '.json' 
    }); 


    $translateProvider.preferredLanguage('en_US'); 
    // $translateProvider.use('de'); 
    $translateProvider.useCookieStorage(); 
    $translateProvider.fallbackLanguage("de_DE"); 
    } 
]); 

angular.module('myApp').controller('someController', ['$scope', '$translate', 
    function($scope, $translate) { 

    $scope.switchLanguage = function(key) { 
     $translate.use(key); 
    }; 
    $scope.showDiv = function() 
    { 
     var html = document.getElementById("newpage").innerHTML; 
     var container = document.createElement("span"); 
     container.innerHTML = html; 
     document.getElementById("parent").appendChild(container); 

    } 
    } 

]); 

lang_de_DE.json

{ 
"HEADLINE": "Überschrift", 
"LANG_DE_DE": "Sprache: Deutsch", 
"LANG_EN_US": "Sprache: Englisch", 
"HELLO"  :"Neue Seite" 
} 

lang_en_US.json

{ 
"HEADLINE": "Headline!", 
"LANG_DE_DE": "Lang: German", 
"LANG_EN_US": "Lang: English", 
"HELLO"  :"New page" 
} 

在这个新的页面文本(显示div功能)不会更新时,我改变语言。 Plunker链接https://plnkr.co/edit/1pBWUFZMbHx4zKzNRKzD?p=preview

回答

1

使用ng-repeat,不要操纵控制器内的DOM。

更改您的跨度是这样的:

<span ng-repeat="div in divs"> 
    <h1 class="xx">{{'NEWPAGE'| translate }}</h1> 
</span> 

和你showDiv功能:

scope.divs = []; 
$scope.showDiv = function() 
{ 
    $scope.divs.push({}); 
} 

更新plunker here

你需要清楚地以更多的角度来思考。不要用jQuery和dom操作代码污染你的控制器。这不是什么angularjs的目的。

阅读关于ng-repeat here的文档。