gpt4 book ai didi

javascript - Angular.js 在 Controller 中调用指令函数

转载 作者:行者123 更新时间:2023-11-29 18:11:47 25 4
gpt4 key购买 nike

我想调用指令中定义的函数,正好与this stackoverflow question相反

我试过了,但没有用。

app.directive('myDirective', function() {
return {
link: function(scope, element, attrs) {
scope.someDirectiveFn = function(arg) {
return "in directive";
};
},
}
});

function MyCtrl($scope) {
alert($scope.someDirectiveFn());
}

这可能吗?我怎么能得到它?这是一种不好的做法吗?

编辑

我是这样的:

.controller('MyCtrl', function($scope) {
alert($scope.func());
})

.directive('myDirective', function() {
return {
controller: function($scope, $element){
$scope.func = function() {
return "text";
};
}
}
});

最佳答案

您可以使用事件系统来实现这一点。

首先,使用您的参数在您的范围内发出一个自定义事件。其次,使用 Angular $on 方法听指令中的范围。

app.controller('MyCtrl', function($scope) {
$scope.invokeDirectiveMethod = function() {
$scope.$emit('invokeMyDirectiveMethod', 'myParameter');
};
})

.directive('myDirective', function() {
return {
link: function(scope, element, attrs) {
var someDirectiveFn = function(event, arg) {
alert(arg + " in directive");
};

scope.$on('invokeMyDirectiveMethod', someDirectiveFn);
},
}
});

这是一个有效的 plunker .

更新

根据您的更新,事件通信不符合您的问题。

使用两种方式绑定(bind)并在该对象中定义 someDirectiveFn 将对象传递给指令怎么样?这样您就可以传递参数并从中返回值。

app.controller('MyCtrl', function($scope) {
$scope.shareObject = {};

$scope.invokeDirectiveMethod = function() {
if (angular.isFunction($scope.shareObject.someDirectiveFn)) {
$scope.message = $scope.shareObject.someDirectiveFn('from controller');
}
};
})

.directive('myDirective', function() {
return {
scope: {
'shareObject': '='
},
link: function(scope, element, attrs) {
scope.shareObject.someDirectiveFn = function(arg) {
return arg + ' from parameter';
};
},
}
});

已更新 plunker .

关于javascript - Angular.js 在 Controller 中调用指令函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26805642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com