anglarjs 绑定失效了

发布于 2022-09-01 22:32:42 字数 2460 浏览 22 评论 0

html代码如下

    <div class="form-group">
        <div class="input-group">
            <input type="text" class="form-control" datepicker-popup="yyyy-MM-dd HH:mm:ss" ng-model="entity.fromTime" max-date="startMaxDate" ng-change="setEndMinDate()" is-open="startOpened" datepicker-options="dateOptions" current-text="今天" clear-text="清除" close-text="关闭" /> 
            <span class="input-group-btn">
                <button type="button" class="btn btn-default" ng-click="startOpen($event)">
                    <i class="glyphicon glyphicon-calendar"></i>
                </button>
            </span>
        </div>
    </div>

controller代码:

    $scope.dateOptions = {
        formatYear: 'yyyy',
        formatMonth:'MM',
        formatDay:'dd',
        startingDay: 1,
        showWeeks: false,
        class: 'datepicker'
    };
    
    $scope.startOpen = function($event) {
        $event.preventDefault();
        $event.stopPropagation();
        $scope.startOpened = true;
    };

directive代码:

.directive('datepickerPopup', ['$compile', '$parse', '$document', '$position', 'dateFilter', 'dateParser', 'datepickerPopupConfig',
function ($compile, $parse, $document, $position, dateFilter, dateParser, datepickerPopupConfig) {
  return {
    restrict: 'EA',
    require: 'ngModel',
    scope: {
      isOpen: '=?',
      currentText: '@',
      clearText: '@',
      closeText: '@',
      dateDisabled: '&'
    },
    link: function(scope, element, attrs, ngModel) {
        scope.$watch('isOpen', function(value) {
            if (value) {
                scope.$broadcast('datepicker.focus');
                scope.position = appendToBody ? $position.offset(element) : $position.position(element);
                scope.position.top = scope.position.top + element.prop('offsetHeight');

                $document.bind('click', documentClickBind);
            } else {
                $document.unbind('click', documentClickBind);
            }
        });

        scope.close = function() {
            scope.isOpen = false;
            element[0].focus();
        };
    }
})

controller和directive中的isOpen是双向绑定的,但执行完directive中得scope.close方法后,第一次执行是有效的,之后就失效了,即使使用scope.$apply()也无效,求大神解答!!!
补充:在directive中定义了一个ng-click的回调方法(即scope.close)并修改了值,但在controller中再修改改值就没有作用了,不触发scope.$watch

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夏见 2022-09-08 22:32:42

回答有误 :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文