Angularjs 如何对自定义指令&x27;调用方法;在Angular.js中,将隔离范围从转置控制器中移除
我在dt模块下创建了一个名为dt modal的指令。在我的主应用程序名为demo的模块中,我使用这个dt模式,它有一个独立的作用域。我创建了这个指令,这样在指令中编写的HTML表单就被屏蔽了,因为我想对许多不同的表单重用这个模式Angularjs 如何对自定义指令&x27;调用方法;在Angular.js中,将隔离范围从转置控制器中移除,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我在dt模块下创建了一个名为dt modal的指令。在我的主应用程序名为demo的模块中,我使用这个dt模式,它有一个独立的作用域。我创建了这个指令,这样在指令中编写的HTML表单就被屏蔽了,因为我想对许多不同的表单重用这个模式 <dt-modal> <form ng-controller="ReviewFormController" name="reviewForm" novalidate ng-sub
<dt-modal>
<form ng-controller="ReviewFormController"
name="reviewForm"
novalidate
ng-submit="reviewForm.$valid && submitReview(review)">
<!-- form contents here -->
</form>
</dt-modal>
此转包表单有一个名为ReviewFormController的自定义控制器,用于侦听提交事件。如何从ReviewFormController中的submitReview()中调用dt模态作用域上的close()方法
这是一个JSBin。如果按ESC键,可以在指令运行中看到close()
如果这是不可能的,是否有更好的设计,该指令
提前谢谢 我的建议是使用
$emit
从控制器触发事件,并直接在控制器上使用$on
控制器
scope.$emit("ValueChanged", value);
在指令中将使用$on
捕获事件,如:
$scope.$on("ValueChanged", function(event, ars){
... //your event has been triggered.
});
重要提示:
指令应该始终是独立的组件,如果指令内部有来自控制器(指令外部)的方法调用,这将在我的指令和控制器之间创建一个依赖关系,当然这将迫使一个指令不能在没有另一个的情况下存在
如果我必须将设计原则应用于指令,那么它将是一个坚实的、单一责任的原则。指令应该能够封装并独立工作
由于您使用的是隔离作用域,因此可以将
<dt-modal id="review-form-modal" api="modal.api">
然后,ng单击
可以使用控制对象调用关闭
:
<button type="submit" ng-click="modal.api.close()">Submit</button>
提交
如果您想尝试这段代码,.我确实尝试过这段代码,它可以工作,但是作为指令的公共API的一部分,外部组件必须确保发出正确的事件,以便指令能够相应地响应。我希望有某种方式,指令可以通过HTML层次结构将方法公开为公共API,而ReviewFormController(子/转置)可以调用这些公共API方法中的任何一种。如果你需要听起来更像是服务的“公共”方法,那么你可以使用服务来实现这一点。我曾考虑将模式打开/关闭放在服务中,但这需要在服务中进行DOM操作,这似乎违反了角度约定。情态形式似乎是这样一个共同特征。人们通常如何处理这个问题?有没有比我开始的更好的方法?在子控制器上使用父作用域,并将属性添加到指令并观察它是另一个选项transclude控制器的父作用域在ReviewFormController中不可用。我想这是因为dt modal指令有一个隔离作用域。我可以使用它,但我想从零开始学习如何使用它。聪明。绝对是最好的解决方案。非常感谢。
<button type="submit" ng-click="modal.api.close()">Submit</button>