Methods 将方法添加到角度指令?

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,

我试图创建一个增强HTML元素的指令。因此,我设法让指令运行并与元素关联我当前的代码如下:

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>