问题描述
项目中在factory中编写模态弹出框组件,之前只是简单的实现弹出,关闭功能。现在新增了ng-click事件去请求数据,`//这里定义了一些模态框简单的事件函数就不一一举出了......
getTpl = function(name){
switch(name){case'unbindMemCard': tpl=’<p class='vip-card-dialog'>’+ ’<p class='vip-card-dialog-bd'>’+ ’<p>确定解绑会员卡号{{currentCard.mcCode}}下的黄金会员卡消费项目。</p>’+ ’<p>解绑后的消费项目可到场馆前台进行重新绑定。</p>’+ ’</p>’+ ’<p class='vip-card-dialog-ft'>’+ ’<a href='javascript:void(0);' class='vip-card-btn-dialog cancel my_default'>取消</a>’+ ’<a href='javascript:void(0);' ng-click='unbindMember()' class='vip-card-btn-dialog ok my_primary'>确定</a>’+ ’</p>’+ ’ </p>’; break;default : return; } return tpl;};` return { unbindMemCard:function(){var tpl=getTpl(’unbindMemCard’);addAlertify(tpl);//弹出模态框//关闭模态框var my_default = document.getElementsByClassName('my_default')[0];my_default.addEventListener('click',defaultFun,false); }, }`
dialogService.unbindMemCard();//弹出模态弹出框$scope.unbindMember=function(){ //解绑函数 ......}
确定按钮上的ng-click函数原本是在解绑会员卡整个页面上的,现在把这个点击事件迁移到模态弹出框中去了,我发现触发不了。也就是解绑页面加载了html模板,当前整个页面里面$scope.unbindMember仍然取不到tpl,里面的ng-click='unbindMember()'. 应该如何解决? 我的思路:1、在factory里面另起一个方法去请求接口; 2、把ng-click=unbindMember()变得能让解绑页面获取到
问题解答
回答1:首先声明,我是 粗暴的 野生程序员,可能我的方法不好。
如果让我来实现,我觉得这个场景适合 用 directive 来实现。
//当前控制器:$scope.XXX : { success : function(){ }, canel : function(){ }}
<model-box mb-data='XXX'></model-box>
弹出/关闭 啥的,在 directive 的 控制器里写。
最后安利下我的 分页程序,按 社区 里大神的写法,要写到 服务里,我却用 directive 造了个轮子:http://www.miaoqiyuan.cn/p/an...
回答2:促发不了 是因为ng-click 在当前的scope里找不到unbindMember(),这个scope不是你controller里面那个scope了,甚至可能不存在~这里涉及到对Dom的操作,所以把这一部分还是写到directive里面

