javascript - angular 指令内部事件如何改变外层scope值?
高洛峰
高洛峰 2017-04-10 14:42:54
[JavaScript讨论组]

我看了一下教程里,都是在template设置了 ng-model,我想如果model不设置,单纯的修改scope内部值,页面显示不刷新,为何?

var myMod = angular('myMod',[])

myMod.controller('ctl',function($scope){
    $scope.hello = 'hello'
})
.directive('drc',function(){
    return {
        link:function(scope,elem, attr){
            elem.click(function(){
                scope.hello = "www"
            })

        }
    }
})
<p>{{hello}}</p>
<p drc>click</p>

这样的话,我试下来click内部的scope.hello会改变,但是这个改变不会影响到外层hello的展现。好像link内部的scope只是外层$scope的一份拷贝。

请问我该如何实现我想要的这个功能?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(3)
伊谢尔伦

如果我记得没错的话 Angular Directive里的scope属性有如下属性。

scope:false (default)
scope:true (自顶向下,继承一个子作用域)
scope:{} (实例化一个新的scope对象,创建一个隔离的作用域)

因为指令的本身就是为了创建可复用组件的,相对来说使用单独的、隔离的作用域会比较好,如果需要和外部的controller进行数据传递或者通讯,在dom上以及scope里对数据做一次双向绑定就可以了。

然后如果你就是希望直接在link里修改并且渲染的话。

link:function(scope,elem,attr){
    elem.bind('click',function(){
        scope[modelName]="new hello";
        scope.$apply();
    })
}
巴扎黑

http://stackoverflow.com/questions/17561632/how-to-modify-scope-from-within-a-directive-in-angularjs

巴扎黑

先试一下如下代码:

elem.click(function(){
    scope.hello = "www";
    scope.$apply(); 
});

神奇么?

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

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