Angular指令没有获取父级设置的值

时间:2017-01-31 21:59:40

标签: javascript angularjs angularjs-directive angularjs-scope

我有一个带有div的指令,其可见性由其父级设置。期望“显示”是真的,但div在页面加载时仍然不可见。

Directive:
<div ng-show="{{ show }}">
        ...
</div>

angular.module('myModule').directive('myDiv', [
  function () {
    return {
        scope: {
            show: '='
        },
        transclude: true,
        restrict: 'EA',
        controller: myController,
        controllerAs: 'ctrlr',
        templateUrl: 'myDiv.tpl.html'
    };
}]);

Parent:
<div myDiv show="ctrlr.shoudlShow()" ng-repeat="item in ctrlr.items">
</div>

shoudlShow()可能会在页面加载时返回false,之后它会变为true。可能是指令myDiv没有获取shouldShow()的最新值吗?我是否需要注意变化或其他什么?

3 个答案:

答案 0 :(得分:1)

ng-show期望表达式不是插值而你遗漏了controllerAs别名

更改为

<div ng-show="ctrlr.show">

更好的方法是使用ng-repeat上的过滤器或ng-if。如果不需要,那么添加所有这些元素(以及相关的手表)是没有意义的

答案 1 :(得分:0)

我并不完全明白您要尝试实现的目标,但在创建Angular指令时,名为 myDiv 的声明指令的HTML属性应为 my-div 而不是 myDiv (参见documentation

['elem2', 'elem3', 'elem4', 'elem5']

答案 2 :(得分:0)

你有一个名为 shoudlShow()的函数,并且所述函数将返回一个将传递给指令的布尔值。在这种情况下,您需要绑定返回到指令的变量,绑定该函数将不起作用。你可以使用像

这样的东西
vm.isShown=vm.souldShow();

然后在你的指令

<div myDiv show="ctrlr.isShown" ng-repeat="item in ctrlr.items">
</div>