Methods 将方法添加到角度指令?
我试图创建一个增强HTML元素的指令。因此,我设法让指令运行并与元素关联我当前的代码如下:Methods 将方法添加到角度指令?,methods,angularjs,angularjs-directive,Methods,Angularjs,Angularjs Directive,我试图创建一个增强HTML元素的指令。因此,我设法让指令运行并与元素关联我当前的代码如下: angular.module('myModule', []) .directive('myDirective', function() { return { restrict: 'C', replace: false, scope: {}, link: function(scope,
angular.module('myModule', [])
.directive('myDirective', function() {
return {
restrict: 'C',
replace: false,
scope: {},
link: function(scope, element, attrs) {
}
}
});
现在我想向HTML元素添加新方法,例如,我想这样做:
// Pseudo code
myElement.reset();
myElement.reload(); // etc.
将这些方法添加到指令中的最佳方式是什么 您的指令示例非常基本,因此我看不出您想要实现什么。 至少我可以说:您可以将新函数定义为作用域的函数,例如
...
link: function(scope, element, attrs) {
scope.reset = function() {
// reset something
}
// ...
}
如果要访问作用域中加载的数据(例如,用于函数重载()),则应为此编写一个控制器。因此,您可以将服务作为数据源注入。
直接实现绑定到元素的函数更像是jQuery方式,而不是angularjs方式。在angularjs中,您主要使用范围
也许您最多可以使用JSFIDLE或plnkr提供一个更完整的示例,我认为更容易将您的用例或问题视为一段工作代码。将新方法添加到元素中不是一种有角度的方式。角度方法是创建带有字段的对象,将其传递给指令,并观察指令内的字段更改。下面是一个简单的例子:将这些方法添加到指令中的一种方法是将指令设置为控制器(也称为子视图)。控制器中的$scope参数将为您提供对模板中HTML的双向访问: 例如:
.directive("myDirective", function() {
var controller = ['$scope', function teamCountCtrl ($scope)
{
$scope.reset = function() {
// modify $scope.obj
};
$scope.reload = function() {
// modify $scope.obj
};
}];
return {
replace: true,
templateUrl: 'js/directives/teamCount.html',
scope: {
obj: '='
},
controller: controller
}});
然后在HTML模板中可以调用reset()或reload():
我不清楚您真正想做什么,但您没有在angular中为HTML元素添加函数。定义函数的自然位置可能是在指令控制器中,然后通过指令$scope公开它们,也可能是控制器本身——这实际上取决于您想做什么。或多或少与我的问题相同。我仍在寻找一个令人满意的答案。如果阿泰姆的答案是“角度的方式”,那么角度的方式不是一个很好的方式;根据这个答案:使用属于您的指令的函数污染范围是不好的,但是我还没有找到在哪里添加它们以及如何调用它们。这和另一个答案出现在谷歌搜索中,但没有回答我的问题。@HMR不要担心污染范围,因为您有
scope:{}
指令有一个独立的范围。您可以在链接或控制器中向作用域添加函数。
<div>
<a tabindex=-1 class="btn" href="#" ng-click="reset()">
<i class="fa fa-fw"></i>
</a>
<a tabindex=-1 class="btn" href="#" ng-click="reload()">
<i class="fa fa-fw"></i>
</a>