angular.js - angularjs scope.$watch取不到input变化的值
仅有的幸福
仅有的幸福 2017-05-15 16:49:37
[AngularJS讨论组]

我想用angularjs和my97datepicker做一个东西,写了一个direcitve,在点击选择完时间之后,把值同步到scope上面。描述的有点乱,看下主要代码:

javascriptvar datepicker=angular.module("datepicker",[]);
datepicker.controller("datepickerCtrl",function($scope){
    $scope.date="2014-10-14";
});
datepicker.directive("datePicker",function(){
    return {
        restrict:"A",
        link:function(scope,element,attr){
            element.bind("click",function(){
                window.WdatePicker();
            });
            //问题在这里,无法取到变化的值,而且加上这个,连初始的值都无法显示出来。
            scope.$watch(attr.value,function(newVal){
                scope.date=newVal;
            });
        }
    };
});

在线地址:http://jsfiddle.sinaapp.com/4zz6nvadg/embedded。初学angularjs,每次写directive都是卡在$watch这里。

仅有的幸福
仅有的幸福

全部回复(4)
PHPz

不知道为何要这么用,这里你需要明确一个概念,属性和 scope 是不同的,如果要绑定属性值到 scope 中,需要在 directive 中去做 scope 的声明,有以下三种方式:

  • =attr 双向
  • @attr 单向
  • &attr 函数

按照你的思路,可能是下面的方式:

scope: {
  value: '=value'
}

但即使是做了绑定,还要明白这个元素的 value 的值变更并不是 Angular 默认会做监控的,这个绑定只是说要去绑定这个属性值对应的变量,当然无法 watch 到 value 的变更。
其实用 ng-model 和 ng-change 足够了。

最终可能是这样:

<input ng-model="date" date-picker />
黄舟

试试把$scope传进来!$watch是在$scope基础上的

習慣沉默

没找到link的详细文档,不能确定attr的具体使用方法,不过觉得你可以试试$watch一下element的value。

至于楼上2位,在directive里scope就是它的$scope,attr是link里的一个参数,不需要另外定义。

某草草

楼主你好,请问这个问题最后如何解决,我现在是ng-model取到的值还是undefined

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

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