Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
Javascript 指令链接函数中未定义范围变量_Javascript_Angularjs_Angularjs Directive_Ionic Framework_Ionic - Fatal编程技术网

Javascript 指令链接函数中未定义范围变量

Javascript 指令链接函数中未定义范围变量,javascript,angularjs,angularjs-directive,ionic-framework,ionic,Javascript,Angularjs,Angularjs Directive,Ionic Framework,Ionic,我有一个指令,其中有一段代码: return { restrict: "E", scope: { moduleProgress: "=", modules: "=", parentScroll: "=" }, templateUrl: 'app/program/module.list.template.html', link: function(scope,el,attrs,ctrl,tf) {

我有一个指令,其中有一段代码:

return {
    restrict: "E",
    scope: {
        moduleProgress: "=",
        modules: "=",
        parentScroll: "="
    },
    templateUrl: 'app/program/module.list.template.html',
    link: function(scope,el,attrs,ctrl,tf) {
        $templateRequest("app/program/chapter.list.template.html").then(function(template) {
            var template = angular.element(template);
            var elements = [];

            console.log(scope);

            attrs.$observe("modules", function(val) {
                scope.modules.forEach(function(module) {
                    module.open = false;
                });
            });

出于某种原因,第一次导航到包含此指令的视图时,一切正常,但从第二次开始,我总是得到一个
无法调用未定义的
错误方法'forEach'。我通读了一些关于SO的类似问题,其中提到插值属性在链接函数中不立即可用,因此他们建议使用
$observe
。我甚至添加了一个
console.log(scope)
,对象上显示了
modules
属性。你知道可能是什么原因吗?

应该是
$scope.$watch
而不是
attrs.$observe
作为
$observe
所需的
@
在指令的独立范围内,在html上应该是
模块=“{module}}”
,对于大对象,DOM将变得混乱,因此我希望您使用有意义的
$watch

代码

scope.$watch("modules", function(newVal) {
    if(newVal){
        scope.modules.forEach(function(module) {
            module.open = false;
        });
    }
});

scope.modules
是一个数组。即使它不是一个有效的方法,问题是它说我的
范围.modules
属性未定义。我想你只在包含插值的属性上使用
$observe
(我很确定它总是返回字符串),即
{}
。因此,不要认为这对数组有效。不过我可能错了。我从来都不需要使用它。是的,
$observe
只用于插值(@)属性,我想这是一个解决方案。问题出在我的父控制器中,它在承诺之后定义了
$scope.modules
,因此在指令链接时间内它还不可用。我可以
$watch
查找属性或在resolve上获取数据,这就是我所做的。但是谢谢;)@Thiatt更新了答案..是的,如果检查将验证
模块
值是否存在,很高兴听到它确实有帮助..请进行投票..谢谢:)经过一生的调试,我终于发现承诺的数据导致我的链接函数以未定义的值运行。