Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.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 angularjs嵌套指令作用域隔离隐藏父指令对象_Javascript_Angularjs - Fatal编程技术网

Javascript angularjs嵌套指令作用域隔离隐藏父指令对象

Javascript angularjs嵌套指令作用域隔离隐藏父指令对象,javascript,angularjs,Javascript,Angularjs,我想创建顺序为top、parent和sub的嵌套指令 <div ng-app="app"> <top> <parent> <sub global-name="global"></sub> </parent> </top> </div> 这不管用 当然不能,这就是隔离作用域的意义所在,因为父指令和子指令都有隔离作用域,这不起作用 当您希望2指令具有父/子关系时,

我想创建顺序为topparentsub的嵌套指令

<div ng-app="app">
  <top>
    <parent>
        <sub global-name="global"></sub>
    </parent>
  </top>
</div>

这不管用

当然不能,这就是隔离作用域的意义所在,因为父指令和子指令都有隔离作用域,这不起作用

当您希望2指令具有父/子关系时,可以使用父指令的控制器API与子指令到父指令进行通信

检查这把小提琴:

angular.module(“app”)指令(“父”,函数(){
返回{
限制:“E”,
控制器:功能($scope){
this.global={name:“父指令”};
},
链接:功能(范围){
},
是的,
模板:“”,
作用域:{}
}
});
角度。模块(“app”)。指令(“子”,函数(){
返回{
限制:“E”,
需要“^parent”,
作用域:{},
控制器:函数(){
},
链接:函数(作用域、元素、属性、父控件){
log(“父项:+parentCtrl”);
scope.title=parentCtrl.global;
console.log(scope.title.name);
},
模板:“全局:{{title.name}}”
}
})

当然不能,这就是隔离作用域的要点,因为父指令和子指令都有隔离作用域,这不起作用

当您希望2指令具有父/子关系时,可以使用父指令的控制器API与子指令到父指令进行通信

检查这把小提琴:

angular.module(“app”)指令(“父”,函数(){
返回{
限制:“E”,
控制器:功能($scope){
this.global={name:“父指令”};
},
链接:功能(范围){
},
是的,
模板:“”,
作用域:{}
}
});
角度。模块(“app”)。指令(“子”,函数(){
返回{
限制:“E”,
需要“^parent”,
作用域:{},
控制器:函数(){
},
链接:函数(作用域、元素、属性、父控件){
log(“父项:+parentCtrl”);
scope.title=parentCtrl.global;
console.log(scope.title.name);
},
模板:“全局:{{title.name}}”
}
})

这里有一个不同方法的解决方案-

JS

angular.module(“app”,[]);
角度。模块(“app”)。指令(“顶部”,函数(){
返回{
限制:“E”,
模板:“”
}
});
角度.module(“app”).指令(“父”,函数(){
返回{
限制:“E”,
控制器:功能($scope){
$scope.global={
名称:“父指令”
};
},
链接:功能(范围){
},
模板:“”,
作用域:{}
}
});
角度。模块(“app”)。指令(“子”,函数(){
返回{
限制:“E”,
范围:{
全球:“=”
},
控制器:函数(){
},
链接:功能(范围){
scope.title=scope.global;
console.log(scope.global);
},
模板:“{global.name}}”
}
});
加价

<div ng-app="app">
  <top>
  </top>
</div>

这里有一个不同方法的解决方案-

JS

angular.module(“app”,[]);
角度。模块(“app”)。指令(“顶部”,函数(){
返回{
限制:“E”,
模板:“”
}
});
角度.module(“app”).指令(“父”,函数(){
返回{
限制:“E”,
控制器:功能($scope){
$scope.global={
名称:“父指令”
};
},
链接:功能(范围){
},
模板:“”,
作用域:{}
}
});
角度。模块(“app”)。指令(“子”,函数(){
返回{
限制:“E”,
范围:{
全球:“=”
},
控制器:函数(){
},
链接:功能(范围){
scope.title=scope.global;
console.log(scope.global);
},
模板:“{global.name}}”
}
});
加价

<div ng-app="app">
  <top>
  </top>
</div>


如果我将父对象传递给子对象,则有两种方法。我不会设置父对象的隔离范围。或者,若我隔离父控制器的作用域,我应该在子指令中使用require来访问父控制器。这正是我所做的,我访问父控制器而不是作用域,这就是使用ng模型的方式,以及角度消息的工作方式。在指令之间使用作用域在我看来是一个非常糟糕的主意。若我将父对象传递给子对象,我有两种方法。我不会设置父对象的隔离范围。或者,若我隔离父控制器的作用域,我应该在子指令中使用require来访问父控制器。这正是我所做的,我访问父控制器而不是作用域,这就是使用ng模型的方式,以及角度消息的工作方式。在指令之间使用作用域是一个非常糟糕的主意。
angular.module("app").directive("parent", function(){
        return {
            restrict: "E",
        controller: function($scope){
                this.global = {name:"parent directive"};
        },
        link: function(scope){

        },
        transclude: true,
        template: "<div ng-transclude></div>",
        scope: {}
    }
});

angular.module("app").directive("sub", function(){
        return {
            restrict: "E",
        require:"^parent",
        scope:{},
        controller: function(){

        },
        link: function(scope, element, attr, parentCtrl){
            console.log("parent : "+parentCtrl);
                scope.title = parentCtrl.global;
            console.log(scope.title.name);
        },
        template: "Global : {{title.name}}"
    }
})
angular.module("app",[]);

angular.module("app").directive("top",function(){
    return {
        restrict: "E",
        template: "<parent></parent>"
    }
});

angular.module("app").directive("parent", function(){
    return {
        restrict: "E",
        controller: function($scope){
            $scope.global = {
                name: "parent directive"
            };
        },
        link: function(scope){

        },
        template: "<sub global='global'></sub>",
        scope: {}
    }
});

angular.module("app").directive("sub", function(){
    return {
        restrict: "E",
        scope: {
            global: "="
        },
        controller: function(){

        },
        link: function(scope){
            scope.title = scope.global;
            console.log(scope.global);
        },
        template: "{{global.name}}"
    }
});
<div ng-app="app">
  <top>
  </top>
</div>