我创建了一个具有独立范围的指令。不知何故,当我尝试从指令的元素中获取范围时,它给出了控制器的范围,而不是孤立的范围。
我的代码出了什么问题?谁能解释scope()方法是如何工作的?
这是我的js代码:
angular.module('myApp',[])
.directive('component',function(){
return {
restrict:'EA',
replace:false,
scope:{
"model":"="
},
template:'<div>{{model.name}}</div>',
link:function($scope,element,attrs){
element.bind('click',function(event){
console.log("element scope id->", element.scope().$id );
});
}
};
})
.controller('AppCtrl',function($scope){
$scope.myModel = {
name:"Click me, to see scope's id in console"
};
console.log("controller scope id->", $scope.$id);
});
和标记:
<div ng-app="myApp" ng-controller="AppCtrl">
<component selectable model="myModel"></component>
</div>
答案 0 :(得分:0)
您需要更改此行:
console.log("element scope id->", element.scope().$id );
对此:
console.log("element scope id->", $scope().$id );
如果你想从元素中获取范围,请执行以下操作:
console.log("element scope id->", element.isolateScope().$id );
注意对isolateScope的调用。见https://docs.angularjs.org/api/ng/function/angular.element#methods
答案 1 :(得分:0)
在您的指令中,您通过创建自己的范围对象范围来创建私有范围:{model:&#39; =&#39;} 。这就是为什么element.scope()实际上是它的父母范围。
以下是一些事实:
希望这会有所帮助。