Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何调用自定义指令';AngularJS的行动?_Angularjs_Kineticjs - Fatal编程技术网

如何调用自定义指令';AngularJS的行动?

如何调用自定义指令';AngularJS的行动?,angularjs,kineticjs,Angularjs,Kineticjs,在AngularJS中,您可以制作一个按钮来调用如下操作: <div ng-controller="myController"> <button ng-click="onButtonClicked()">Click me</button> </div> <div ng-controller="myController"> <my-canvas ng-success="onScenarioSuccess" /> &l

在AngularJS中,您可以制作一个按钮来调用如下操作:

<div ng-controller="myController">
  <button ng-click="onButtonClicked()">Click me</button>
</div>
<div ng-controller="myController">
  <my-canvas ng-success="onScenarioSuccess" />
</div>
但我想不出正确的方法


如何生成指令以编程方式调用其动作/事件?

如果希望指令公开API以绑定到行为,则应使用隔离作用域并使用
&
本地作用域属性。这允许您传入指令可以调用的函数。下面是一个简单的例子:

.directive('testDirective', function () {
    return {
        restrict: 'E',
        scope: {
            action: '&'
        },
        template: '<button ng-click="action()">Test</button>'
    };
});
.directive('testDirective',function(){
返回{
限制:'E',
范围:{
行动:'&'
},
模板:“测试”
};
});
然后像这样使用它:

<test-directive action="myControllerFunction()"></test-directive>

根据文件:

&
绑定允许指令触发对 在特定时间原始范围的上下文中的表达式。 允许任何合法表达,包括 包含函数调用。因此,
&
绑定非常适合 将回调函数绑定到指令行为


如果要公开自定义事件(如
ng success
)并调用该事件上的函数,请参阅。

。 您可以使用隔离作用域执行@Beyers提到的操作

或者查看
ng click
的源代码,它只是将javascript事件包装在$scope.apply内,使用
$parse
服务计算传递给它的表达式。可以在链接函数中添加类似的内容

var fn = $parse(attr['ngSuccess']);
element.on('someEvent', function (event) {
    var callback = function () {
        fn(scope, {
            $event: event
        });
    };
    scope.$apply(callback);
});

这种机制的优点是不创建隔离作用域。

为什么这是一个优点?使用隔离作用域会有什么损失?当隔离作用域具有内部html时,管理起来会变得更加棘手。如果内部html来自父级(ng transclude),则它接受父级范围。在内部html中,是指令的html模板,然后它接受独立的作用域。当您将指令创建为具有自己UI的组件时,隔离作用域是有意义的。如果你也这样做,你可以继续使用隔离作用域。@ErikEscobedo使用隔离作用域不会损失任何东西,事实上你会得到很多。隔离范围完全是关于可重用性的,换句话说,指令不依赖父范围来操作,您也不能意外地更改父范围上的任何内容等。隔离范围在最初掌握时有些复杂,但IMHO是真正获得指令好处所需掌握的核心概念之一。在线上有很多专门介绍这个主题的资料,可以帮助您了解最新情况。正如我所说,当您创建组件指令时,隔离作用域是有意义的,这些指令有自己的视图。如果一个指令被用作退出指令或html元素的扩展,则隔离范围可能会有问题。我知道指令提供了一个隔离上下文,这在某些上下文中是有用的。当你看Angular指令时,你会注意到它们都没有创建独立的作用域。