0

我正在构建一个 AngularJS 应用程序。我使用三个指令来构建菜单。标题在 i18n 文件中,因此大多数属性都是 angularjs 表达式。以下是指令结构的片段:

<navbar title="{{ LABELS.HOME }}" inverse="true">
  <mainmenu>
    <menu-item name="system" title="{{ LABELS.SYSTEM }}">
      <submenu name="users" title="{{ LABELS.USERS }}"></submenu>
    </menu-item>
  </mainmenu>
</navbar>

问题出在指令的代码上。在controller函数中(甚至在link函数中),我尝试检索titleandname属性,但它们总是以undefined值的形式出现,即使我做了一个console.dir($scope)我可以看到属性,

您可以在此处查看代码片段

4

1 回答 1

0

由于您没有提供任何代码,因此我将在这里进行猛烈抨击,但是这些代码是否在ng-repeat?

如果是这样,那么问题是在将值应用于范围之前实际调用了链接函数。这是因为ng-repeat只需为整个循环执行一次链接,然后复制节点,每个节点都应用了正确的$scope

您可以在控制台中看到值的原因是作用域对象在链接函数运行后更新,但控制台呈现它的输出之前。

这会导致您遇到以下情况:

$scope == {};
link();
    console.log($scope); // stores reference to be rendered
$scope.foo = 'bar';
renderConsoleOutput();

如果您无法使用标准绑定(例如,$parent.LABELS.SYSTEM或类似的东西)修复它,您可以将您的对象访问包装在一个方法中,然后绑定该方法:

// in menu-item directive:
$scope.getLabels = function() { return $scope.LABELS; }
// in menu-item template:
<menu-item title="{{ getLabels().SYSTEM }}">
于 2013-08-09T01:49:40.460 回答