使用$scope.$parent.$$childHead从控制器访问指令函数.AngularJS中的functionNa
Accessing directive function from controller using $scope.$parent.$$childHead.functionName in AngularJS
我已经创建了一个指令。
angular.module('app')
.directive('navtree', function (service) {
return {
restrict: 'A',
scope: {},
link: function (scope, el) {
scope.loadNavtree = function(){
service.data()
.then(function (data) {
///Do something
});
}
scope.loadNavtree();
}
};
});
在控制器中,我可以使用
访问方法$scope.$parent.$$childHead.loadNavtree();
虽然这是工作,我觉得这不是正确的方法。我想了解像这样从控制器访问指令中定义的函数的缺点是什么。
我看了这个链接,但是我无法跟随
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
/// How to call takeTablet() available in directive from here?
});
app.directive('focusin', function factory() {
return {
restrict: 'E',
replace: true,
template: '<div>A:{{internalControl}}</div>',
scope: {
control: '='
},
link : function (scope, element, attrs) {
scope.takeTablet = function() {
alert('from directive');//
}
}
};
});
这不是正确的方法,因为angular不建议使用它的私有变量来访问指令函数,所以你需要有一个好的方法来做到这一点,这里有一个从控制器访问指令函数的例子。
如果你想使用隔离作用域,你可以通过bi-directional
绑定一个变量的('=')
从控制器作用域传递一个控制对象。通过这种方式,你还可以在一个页面上控制同一指令的多个实例。
plunkr
控制器/指令:
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.focusinControl = {
};
});
app.directive('focusin', function factory() {
return {
restrict: 'E',
replace: true,
template: '<div>A:{{internalControl}}</div>',
scope: {
control: '='
},
link : function (scope, element, attrs) {
scope.internalControl = scope.control || {};
scope.internalControl.takenTablets = 0;
scope.internalControl.takeTablet = function() {
scope.internalControl.takenTablets += 1;
}
}
};
});
HTML: <button ng-click="focusinControl.takeTablet()">Call directive function</button>
<h4>In controller scope:</h4>
{{focusinControl}}
<h4>In directive scope:</h4>
<focusin control="focusinControl"></focusin>
<h4>Without control object:</h4>
<focusin></focusin>
相关文章:
- 从html创建一个指令,该指令按类名应用函数
- AngularJS指令单元测试中未定义的函数
- AngularJS指令部分应用的函数don'不起作用
- 角度指令's链接函数未被调用
- Angular,从指令控制器中的控制器触发函数
- 如何在指令链接函数中使用从控制器传递的筛选器
- 角度指令控制器:参数不是函数,未定义
- 在 Angular 指令中,如何进行回调,其中函数名称位于父范围的变量中
- 通过指令在控制器中执行javascript函数
- AngularJS执行指令模板中的控制器函数
- ng-click指令没有调用整个函数
- 从指令链接函数监视控制器作用域
- 当指令中已经给定作用域时,如何访问控制器中声明的函数
- AngularJS:如何调用指令中定义的函数'控制器的作用域
- 在不使用隔离作用域的情况下执行函数的角度指令
- 在 Angular 指令中定义一个用于 ng-click 的函数
- 列表中项的动态单击函数指令.快到了
- 调用链接函数指令Angular 1 ES6
- 如何从编译器函数指令访问作用域
- 检查angular中链接函数指令中孤立作用域变量的值