角度1.2.16,隔离范围,父函数和ng点击
Angular 1.2.16, isolated scope, parent function and ng-click
我被Angular的一个相当简单的问题难住了(因为我认为它很简单)。有时Angular会让我觉得自己很笨,因为我不可能做错了什么。
拿着这个plnkrhttp://plnkr.co/edit/BmM9C5zjDAIfGTVzkU29?p=preview
HTML:
<body ng-app="app">
<div ng-controller="ASDF">
<div fb-login="doh" ng-click="exec()">CLICKY (should execute parent scope function but doesnt)</div>
</div>
</body>
Javascript:
angular.module('app', [])
.controller('ASDF', function($scope){
$scope.doh = function(d){
alert(d);
}
})
.directive('fbLogin', function(){
return {
restrict: 'A',
replace: false,
scope: {
done: '&fbLogin'
},
link: function(scope){
scope.exec = function(){
scope.done()('asdf');
};
}
}
});
这是怎么回事?
1.2版本中的隔离作用域是真正隔离的(请参阅https://github.com/angular/angular.js/commit/909cabd36d779598763cc358979ecd85bb40d4d7)
修复($compile):使隔离范围真正隔离
修复了隔离范围泄漏到其他地方的问题同一元素上的指令。
隔离作用域现在仅可用于隔离指令请求它及其模板。
非隔离指令不应获得隔离的隔离范围指令,相反,它们将接收原始scope(它是新创建的隔离作用域的父作用域)。
与托比亚斯配对。
BREAKING CHANGE:没有隔离范围的指令不会获得将作用域与同一元素上的隔离指令隔离开来。如果您代码取决于此行为(非隔离指令需要访问隔离范围内的状态),将隔离指令更改为使用scope locals显式传递这些。
//在之前
.指令('ngIsolate',function(){return{作用域:{},模板:"{{value}}"};});
//在之后
.指令('ngIsolate',function(){return{作用域:{value:"=ngModel"},模板:"{{value}};}");
然后它现在唯一的工作方式是通过template/templateUrl(在这种情况下使用transclude,所以我不需要重新创建它):
angular.module('app', [])
.controller('ASDF', function($scope){
$scope.doh = function(d){
alert(d);
}
})
.directive('fbLogin', function(){
return {
restrict: 'A',
replace: false,
scope: {
done: '&fbLogin'
},
transclude: true,
template: '<div ng-transclude ng-click="exec()"></div>',
link: function(scope){
scope.exec = function(){
scope.done()('asdf');
};
}
}
});
因为ng click只能访问父作用域,所以它试图在ASDF控制器的作用域上执行exec。
我相信这会给你想要的行为:
HTML:
<body ng-app="app">
<div ng-controller="ASDF">
<div fb-login="doh">CLICKY (should execute parent scope function but doesnt)</div>
</div>
</body>
Javascript:
angular.module('app', [])
.controller('ASDF', function($scope){
$scope.doh = function(d){
alert(d);
}
})
.directive('fbLogin', function(){
return {
restrict: 'A',
replace: false,
scope: {
done: '&fbLogin'
},
link: function(scope, element){
element.on("click", function () { scope.done()('asdf') });
}
}
});
- ng更改函数未被调用,并且没有错误
- angular.js:13424错误:[ng:areq]参数'fn'不是函数,getObject
- AngularJS:如何使用java脚本函数更改跨度的ng-show条件
- 使用jqGrid列格式化程序函数使ng-click工作
- 想要将ng个repeat对象传递给自定义筛选函数
- ng用异步函数模拟怪异行为
- ng-click指令没有调用整个函数
- AngularJS ng repeat显示原型函数未定义
- ng中继器打印结果0;当我运行函数时
- 调用时未输入角度 ng 单击函数
- 在 Angular 指令中定义一个用于 ng-click 的函数
- ng单击触发函数,但无法更改$scope.var
- 在指令之后加载的角度ng-init函数
- 是否可以在 ng-click 中调用函数字符串
- 如何在 ng-click 函数中更改$rootScope值
- 在引导模式中使用“ng click”触发函数
- AngularJS$rootScope函数ng更改
- 如何在角函数ng-repeat中创建新行
- CSS "float: none;"阻止Javascript函数"ng-click&quo
- 调用angularjs内的函数ng重复