javascript - angularjs 事件执行顺序与预期不一致
PHP中文网
PHP中文网 2017-04-10 14:49:17
[JavaScript讨论组]

http://jsfiddle.net/w86Lzesh/
业务流程是这样的,点击框内的按钮,子控制器发送时间到父控制器,改变数据,父控制器改变万数据后回传成功事件给子控制器,子控制器收到后提示用户操作完成。

现在遇到问题是点击了按钮后,页面提示用户操作完成,然后才区改变父控制器内的数据,我怎么也没弄明白是为啥

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(2)
天蓬老师
   $scope.skin=msg;
   $scope.$apply();
   //父元素向子元素广播
   $scope.$broadcast("successChange",111);

设置过 skin 后当时 angular 并不知道改变,所以没有重新渲染

PHPz

例如这种需求, 我非常不建议楼主使用事件广播的方法做。 而且也不建议控制器嵌套。
angular里面有很多种方法, 但由于教程的问题,太多不论不类的教程导致了这种问题。

楼主这类样式css问题的 简单的做法
1 直接把数据放到@rootScope上。 不要事件广播。 直接就可以操作@rootScope的属性既可。
2 为什么要嵌套控制器? 如果每个子控制器的目的是做成一个组件, 那么应该封装成directive 指令, 通过在hmtl标签属性上传值, 这也是angular 提倡的声明式写法。 就是说控制器里面调用的是指令而不是子控制器。
3 使用ng-class 标签把样式名称写到html标签上,例如ng-class=“{‘cssnamered’:skin=='red'}” 这种而不要拼接样式名称。

如果非要用事件广播,这个问题界面没有刷新是因为广播后先执行变量附值,然后在进行第二次广播 然后才进行angular的$digest进行界面刷新。 $scope.$apply();是强制$digest进行界面刷新

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号