Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 初始化包含范围_Angularjs_Angularjs Scope - Fatal编程技术网

Angularjs 初始化包含范围

Angularjs 初始化包含范围,angularjs,angularjs-scope,Angularjs,Angularjs Scope,我需要用一些数据初始化ng include内部作用域。到目前为止,我一直在ng include元素本身使用ng init,但这样计算的表达式就保存在ng include父范围中,如果两个指令使用相同的名称,就会出现冲突 有一些方法可以解决这个问题,直到现在我已经尝试过: 如果要强制创建新范围,请使用虚拟ng: <div ng-if="true"> <ng-include src="'/partials/reports/chart'" ng-init="chart=

我需要用一些数据初始化
ng include
内部作用域。到目前为止,我一直在
ng include
元素本身使用
ng init
,但这样计算的表达式就保存在
ng include
父范围中,如果两个指令使用相同的名称,就会出现冲突

有一些方法可以解决这个问题,直到现在我已经尝试过:

如果要强制创建新范围,请使用虚拟ng:

 <div ng-if="true">
      <ng-include src="'/partials/reports/chart'" ng-init="chart=getChartParams()"></ng-include>
 </div>

这个解决方案是功能性的,但它们是丑陋的黑客。有更好的解决方案吗?

我已经解决了这个问题,基于原始的
ngInit
,创建了一个自定义指令,但优先级低于
ngInclude

app.directive('init', function () {
    return {
        priority: 0,
        compile: function () {
            return {
                pre: function (scope, element, attrs) {
                    scope.$eval(attrs.init);
                }
            };
        }
    };
});
您可以这样使用它:

<ng-include src="'/partials/reports/chart'" init="chart=getChartParams()"></ng-include>


init表达式将在创建ngInclude作用域之后执行,然后再加载或执行任何内部模板。

您还应该能够使用带有双花括号的任意属性来计算作用域上的表达式

<ng-include src="'/partials/reports/chart'" whatever="{{chart=getChartParams()}}"></ng-include>

ngInclude
有一个
onload
属性,可以满足您的需要。它的工作原理类似于
nginit
,但作用于新创建的作用域

 <ng-include src="'/partials/reports/chart'" onload="chart=getChartParams()">
 </ng-include>


上面说的
onload
是一个“加载新部分时要计算的表达式”,但没有提供使用指南。我不知道这是否是该属性的预期用途,但它确实起到了作用。

这个答案以零票通过。应该有这样的徽章。:-)
 <ng-include src="'/partials/reports/chart'" onload="chart=getChartParams()">
 </ng-include>