[英]AngularJs: How to communicate between two scopes
我尝试遵循http://blog.novanet.no/creating-multilingual-support-using-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
它不起作用。
当您的模板创建模型时,它们会在当前范围内执行此操作,而当前范围不会与您的控制器范围共享(如上一个答案所述,ng-include创建一个新的子范围)。 由于继承的工作方式,添加到此子作用域的项目对父级(或同级兄弟)不可见。
但是,如果将项目添加到已经在父范围内的项目中(谷歌“点符号角”),则这些添加项对父项和兄弟姐妹都是可见的。
一个很好的方法是使用controller-as语法。 我已经更新了您的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();
}]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.