AngularJS:隐藏子控制器的弹出窗口(弹出内容)
AngularJS : Hide popup from child controller (popup content)
我的指令有问题。如果我从弹出式控制器调用线路$scope.popup.show = false
,它工作正常。如果我从子contentDirective
调用$scope.hideModal()
,则会调用代码(在调试中检查),但$scope.popup.show
值不会更改(在调试时值为"false"),并且弹出窗口不会隐藏:/。
你知道吗?:)
index.html:
<popup title="sometitle">
<contentDirective> </contentDirective>
</popup>
popup.html:
<div ng-show="popup.show">
<div ng-transclude></div>
</div>
popup.js
.directive(....
return {....
scope: {}
}
})
.controller(....
$scope.hideModal = function()
{
$scope.popup.show = false;
}
}]);
contentDirective.htlm(非孤立范围)
<div>
<button onclick="changeSomethingAndHide()"/>
</div>
contentDirective.js
.controller(....
$scope.changeSomethingAndHide = function()
{
//calls the parent function
$scope.hideModal();
}
}]);
也许我错过了什么。。
谢谢!
当您处理transcluded内容时,作用域会变得有点棘手。
默认情况下,Transcluded作用域不是继承的(您可以更改这一点),它是封闭指令的"兄弟"作用域,这有点令人困惑,但这是有充分理由的。
因此,默认情况下,您的contentDirective在弹出指令中看不到任何内容。当您在hideModal()函数中设置$scope.popup.show=false时,它所做的只是设置一个新变量contentDirective的范围,而不是设置弹出窗口范围中的变量。
有两种解决方案:
-
您可以手动transclude contentDirective,并使其使用与弹出指令相同的范围。看见http://angular-tips.com/blog/2014/03/transclusion-and-scopes/了解更多详细信息。
-
您可以使用require关键字声明contentDirective,该关键字指示您希望访问弹出指令的控制器。这将被传递到你的链接函数中,你可以用它来调用弹出指令控制器上的方法。看见https://egghead.io/lessons/angularjs-directive-to-directive-communication了解更多详细信息。
- 在angularJS中使用模态窗口时,在控制器之间共享对象数组
- Angularjs - 观察模态窗口从另一个控制器关闭
- ExtJS 4-在调整窗口大小时,溢出的工具栏会失去控制器
- 当滚动$(窗口)时,角度控制器未触发滚动功能
- AngularJS:如何在弹出窗口的控制器中使用翻译(i18n)
- 将参数从 JavaScript 中的剑道窗口刷新传递给控制器操作
- 是否可以使控制器返回模式窗口的数据?MVC5 ASP.NET
- Angularjs $compiling模态窗口内容创建孤立的控制器
- 角度指令控制器单元测试使用窗口.确认
- 从控制器设置窗口字段值
- 想要关闭弹出窗口并在控制器上执行 PHP 脚本后重定向到相应的页面,没有任何事件
- 如何在向rails控制器发送ajax请求后关闭弹出窗口而不重新加载父窗口
- Ruby on rails:如何从登录弹出窗口向rails控制器发送AJAX请求以及用户给定的凭据
- 如何使用AJAX将数据库值从控制器传递到表弹出窗口
- 有没有办法在不渲染任何其他 js 文件的情况下在 rails 控制器方法中发出警报/弹出窗口
- AngularJS:隐藏子控制器的弹出窗口(弹出内容)
- 在弹出窗口中加载内容窗体控制器
- 如何在进入控制器操作之前使用操作链接来获得确认弹出窗口
- 如何修复Appcelerator's”;“导航控制器”;使用TabGroup作为基本窗口
- 我应该从哪里调用警报框,加载窗口-控制器或服务