Javascript include中指令的AngularJS范围

Javascript include中指令的AngularJS范围,javascript,angularjs,Javascript,Angularjs,如何使指令根据父范围的父变量正确更新 我有一个动画指令,我想用它来显示需要通过服务调用填充的单个数据网格的加载。我目前有一个页面的主模板,我有一个ng include,用于我想在页面上显示的某个“小部件”。这个小部件要么显示带有填充信息的div,要么显示loading指令,至少我正试图让它这么做 我正在使用的$watch似乎也不起作用,我在其中放了一些日志语句,我手动更改了“test”指向的变量,但它的行为好像从未更改过一样 //One approach to the directive myA

如何使指令根据父范围的父变量正确更新

我有一个动画指令,我想用它来显示需要通过服务调用填充的单个数据网格的加载。我目前有一个页面的主模板,我有一个ng include,用于我想在页面上显示的某个“小部件”。这个小部件要么显示带有填充信息的div,要么显示loading指令,至少我正试图让它这么做

我正在使用的$watch似乎也不起作用,我在其中放了一些日志语句,我手动更改了“test”指向的变量,但它的行为好像从未更改过一样

//One approach to the directive
myApp.directive('loading', function() {
    return {
        restrict: "E",
        scope : {
            test : '='
        },
        templateUrl: 'partials/loading-animation.html'
    };
});
include的html,其中还包括指令。loadVal是父控制器的父控制器作用域上的变量。loadVal根据服务调用进行更改,并正确更新

<div ng-show="!loadVal" class='address store'>
    <span>{{address.storeName}}</span>
    <span>{{address.address1}}</span>
    <span>{{address.city}},{{address.state}} {{address.zip}}</span>
</div>
<loading test="loadVal" ng-show="test"></loading>

{{address.storeName}
{{address.address1}}
{{address.city},{{address.state}{{{address.zip}
现在,如果我只有指令,它仍然不会显示。我尝试过使用ng开关,但由于没有路由更改,它同时显示加载指令和地址信息。我也尝试过根据一个是真还是假来显示(!loadVal和loadVal),问题是它似乎不知道“!loadVal”是什么,因为它从不显示ng show=“!loadVal”所在的html

编辑:看起来我工作得很好,下面是一个plnkr,显示了我试图实现的目标:


注意:我注意到我无法在指令模板上使用ng show(即ng show=“loadVal”)引用父范围的父范围。但是,如果我创建了一个新变量,使作用域是双向的,并将该变量设置为loadVal,则它将拾取更改。

首先,您似乎正在尝试访问
指令中
加载
指令的隔离作用域的
测试
属性。(
)那是行不通的。在您的代码中,
ng show
实际上试图绑定到的是父范围中的
$scope.test
。如果要使用指令范围的
test
属性进行可见性,请在模板中使用它

此外,您的指令中不需要使用$watch,因为它现在就存在,您几乎不需要使用
scope.$apply()
来更改作用域属性。AngularJS将您的大部分代码封装在一个
$apply
调用中

试试这个:

myApp.directive('loading', function() {
    return {
        restrict: "E",
        replace: true,
        scope : {
            test : '='
        },
        template: '<div ng-show="test"></div>'
    };
});
myApp.directive('loading',function(){
返回{
限制:“E”,
替换:正确,
范围:{
测试:'='
},
模板:“”
};
});
为了演示,我用内联模板替换了templateUrl


视图中的
加载
指令可以简化为

实际的标记还是仅仅是一个输入错误?哦,对不起,这是一个输入错误。我现在的代码不是这样的,没问题。你能创建一个Plunker脚本来显示你的问题吗?在那里调试会更容易。当然,我明天会发布一个。我已经试过了,但仍然不起作用。问题是loadVal变量实际上不在父作用域上,而是在父作用域的父作用域上。即使在父控制器的作用域上进行测试,它也不起作用。我已经尝试将(test=“loadVal”ng show=“test”)放在模板中的directive元素和div上,但都不起作用。有趣的是,我也尝试在另一个html上引用它,它完全忽略了ng show并显示了内容。啊,所以你真正的问题是范围继承没有按你期望的方式工作。您可以发布一个带有更多上下文的Plunker或JSFIDLE吗?我们需要了解父控制器与父控制器的父控制器之间的关系,以便对此提供帮助。我发现了这一点,我昨天制作的一个plnkr显示了它的工作原理。