链接函数的参数elem
Parameter elem of the linking function
我有以下指令:
.directive('confirmOnExit', function () {
return {link: function ($scope, elem, attrs) {
window.onbeforeunload = function () {
if ($scope.contextForm.$dirty) {
return "Unsaved data detected.";
}
}
}
};
})
正如你所看到的,这个指令写得不是很好,因为它直接引用了形式contextForm
。
我想做的是一些更通用的东西(所以我也可以在其他形式中使用它):
.directive('confirmOnExit', function ($window) {
return {link: function ($scope, elem, attrs) {
// Make sure code is only executed if directive is place on a form
// Should I even do this here??
if (elem[0].tagName == "FORM") {
var form = elem[0];
$window.onbeforeunload = function () {
if (form.className.indexOf("ng-dirty") > -1) {
return "Unsaved data detected.";
}
}
}
};
})
你会注意到代码仍然很难看,因为form.hasClass("ng-dirty")
或form.$dirty()
不起作用…我也认为访问elem[0]
是不正确的…
我真的很感激你的帮助!
谢谢! !
来自AngularJS表单doc:
如果指定了name属性,则发布到表单控制器上此名称下的当前作用域。
所以你可以通过在name
属性上使用$eval
来访问控制器:
.directive('confirmOnExit', function () {
return {
link: function ($scope, elem, attrs) {
var formCtrl = $scope.$eval(attrs.name);
window.onbeforeunload = function () {
if (formCtrl.$dirty) {
return "Unsaved data detected.";
}
}
}
};
});
你应该依赖于FormController (http://docs.angularjs.org/api/ng.directive:form.FormController)
那么你能做的是:
- 添加"
require: '^ngForm'"
to request form controller"作为链接函数的参数 - 为链接函数添加另一个参数(类似于
formCtrl
) - 使用
formCtrl.$dirty
如果你不清楚,用指令创建plunker示例,我会尝试对其进行这些更改。
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 使用Express捕获参数
- 参数变量出现ngTable指令问题
- AngularJS:我可以跳过函数参数回调吗
- 如何使用skip参数使用angular ui引导进行服务器端分页
- 要求未定义JS回调参数
- 我的jQuery插件参数没有正确启动,遇到了问题
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- jquery设置为使用参数运行
- Javascript”;类“;带有参数的扩展
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 函数未将值作为参数传递
- 如何将参数传递到angularJs中的工厂
- JS:检查URL中的参数,然后迭代一个参数为var的函数
- 正在传递JSONP标头's数据参数到另一个文件中的AJAX请求
- MVC 3页面导航和使用javascript传递参数
- 从查询字符串参数推断出正确的数据类型
- 传递包含'%的参数'在URL中
- 为什么不'我们在javascript中使用函数参数的数据类型
- 链接函数的参数elem