我正在构建一个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
函数上),我尝试检索title
和name
属性,但它们始终显示为undefined
值,即使我做console.dir($scope)
我可以看到属性,
您可以查看代码here
的代码段答案 0 :(得分: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 }}">