我有以下问题,我想从控制器中调用另一个控制器的功能,我想用于导游(我正在使用ngJoyRide进行导览)。我想在另一个控制器中调用的函数是一个翻译器(LanguageController),它根据作为参数给出的键从数据库中获取字符串。如果找不到密钥,LanguageController将返回一个错误,指出无法从数据库中获取字符串。在我的index.html中获取字符串是可行的,但是我想在我的导游的overlay元素中使用它,这不起作用,但只显示语言控制器的“未获取”错误。
我的index.html如下所示:
<body>
<div class="container-fluid col-md-10 col-md-offset-1" ng-controller="LangCtrl as lc" >
<div ng-controller="UserCtrl as uc" mail='@email' firstname='@firstname'>
<div ng-controller="GuidedTourCtrl as gtc">
<div ng-joy-ride="startJoyRide" config="config" on-finish="onFinish()" on-skip="onFinish()">
...
<a href="/#/language/create" class="font-white"> {{lc.getTerm('system_lang_edit')}} </a>
...
</div>
</div>
</div>
</div>
</body>
我用于导游的控制器看起来像这样:
guidedTourModule.controller('GuidedTourCtrl',['$scope', function($scope) {
$scope.startJoyRide = false;
this.start = function () {
$scope.startJoyRide = true;
}
$scope.config = [
{
type: "title",
...
},
{
type: "element",
selector: "#groups",
heading: "heading",
text: " <div id='title-text' class='col-md-12'>\
<span class='main-text'>"\
+ $scope.lc.getTerm('system_navi_messages') + "\
text text text text\
</span>\
<br/>\
<br/>\
</div>",
placement: "right",
scroll: true,
attachToBody: true
}
];
...
}]);
我最终获得的输出对于overlay元素看起来像这样:
<div class="row">
<div id="pop-over-text" class="col-md-12">
<div id='title-text' class='col-md-12'>
<span class='main-text'>
not fetched yet: system_navi_messages
text text text text
</span>
<br/>
<br/>
</div>
</div>
</div>
...
我希望有人可以在我的代码中看到错误。提前谢谢!
答案 0 :(得分:0)
事情需要清晰,
如何在语言控制器中定义'getTerm'功能,方法是使用 this.getTerm()或 $ scope.getTerm()。由于您使用的是别名,因此您将在语言控制器中使用this.getTerm。
您可以在overlay元素中访问getTerm函数的原因是,因为此overlay元素位于父控制器(语言控制器)中,并且您使用别名'lc'引用它在调用getTerm函数时。这就是为什么它是可以访问的 但是作为参数传递的字符串无法访问父控制器。这就是错误消息在覆盖HTML中呈现的原因。
请为您的应用制作 plunker ,这样有助于解决您的问题。