2015-03-01 3 views
1

Я стараюсь следовать примеру от http://blog.novanet.no/creating-multilingual-support-using-angularjs/ , чтобы сделать многоязычную поддержку, используя AngularJS. Этот пример хорошо работает.AngularJs: Как общаться между двумя областями

Я пробую еще один способ реализовать это. Я использую ng-include для управления разделением модулей заголовка, содержимого и нижнего колонтитула с помощью AngularJS ng-include.

Моя HTML структура выглядит так:

<div ng-include = "'header.html'"> </ div> 
<div ng-include = "'content.php'"> </ div> 
<div ng-include = "'footer.html'"> </ div> 

я сохраняю свою работу на Plunker

Мой вопрос, когда я пытаюсь реализовать несколько языков, и поставить селектор языка в header.html и результат на content.php не работает.

ответ

1

Когда ваши шаблоны создают модели, они делают это в текущей области действия, которая не разделяется с областью вашего контроллера (как упоминалось в предыдущем ответе, ng-include создает новую дочернюю область). Из-за того, как работает наследование, элементы, добавленные в эту дочернюю область, не видны родителям (или братьям и сестрам).

Однако, если вы добавляете элементы к элементу уже в родительском пространстве («угловое обозначение точки google»), эти дополнения будут видны родителям и братьям и сестрам.

Хороший способ сделать это - использовать контроллер-синтаксис. У меня есть updated your Plunk

<body ng-app="myApp" ng-controller="myController as vm"> 

    app.controller('myController',['$scope', 'translationService', 
function ($scope, translationService){ 

    //Run translation if selected language changes 
    $scope.translate = function(){ 
     translationService.getTranslation($scope, $scope.vm.selectedLanguage); 
    }; 

    //Init 
    $scope.vm.selectedLanguage = 'en'; 
    $scope.translate(); 

}]); 
+1

Спасибо за объяснение и пересмотр сценария, очень полезно и это работа. –

Смежные вопросы