angular-ui:datepicker似乎在显示按钮时挂起angularjs

Evr*_*glu 0 javascript jquery jquery-ui angularjs

我在我的应用程序中有这段html代码(之前定义了ng-app和ng-controller值):

<div>
    <label for="projectSearchDateFrom"><%= Res("Projects.Search.From")%></label>
    <input id="projectSearchDateFrom" type="text" ng-model="startDate" ui-date="dateOptions"/>
    <img ng-show="hasStartDate()" ng-click="clearStartDate()" src="/_Layouts/ClientPortal/Images/layout/TA/delete-small.png" alt="<%= Res("ToolbarDialog.Clear")%> <%= Res("Projects.Search.From")%>" title="<%= Res("ToolbarDialog.Clear")%>" />
</div>
Run Code Online (Sandbox Code Playgroud)

我的AngularJS控制器看起来像这样:

function ProjectSearchCtrl($scope) {
    $scope.startDate = '';

    $scope.hasStartDate = function () {
        return $scope.startDate != '';
    };

    $scope.clearStartDate = function () {
        $scope.startDate = '';
    };

    $scope.dateOptions = {
        dateFormat: "yy-mm-dd",
        showOn: "focus"
    };
}
Run Code Online (Sandbox Code Playgroud)

这很完美:由于AngularUI,AngularJS绑定工作正确地设置了一个datepicker ...

但是如果我将showOn值更改为"button"或"both"(实际显示datepicker按钮的两个可能选项),输入后的所有内容(包含ui-date属性)将停止工作:ng-show,ng- click ...控制器甚至没有被调用.

版本(全部是最新的):

  • jQuery 1.7.2
  • angularJS 1.0.0
  • angularUI 0.1.0
  • Chrome 20

Pro*_*ser 6

请查看Select2指令中的这一行.这是一张纸条给任何人写指令/实施在AngularJS插件(不只是AngularUI):

在链接元素之后立即注入新DOM元素的任何插件都有破坏编译器的风险.原因是因为AngularJS的工作方式,它在编译时缓存每个DOM元素的索引,然后在链接时进行第二次传递.注入新DOM时,会在指令后立即偏移所有兄弟节点的索引.

出于这个原因,我被迫在setTimeout中包装TinyMCE和Select2,以便在链接完成注入DOM .请注意,我不打扰使用$ timeout因为我真的不需要/只需要启动$ apply()来打开插件,因为当插件更改数据时已经有回调来执行此操作.

我将研究确保AngularUI中的这个是统一的.不幸的是,目前在AngularJS中似乎没有解决这个问题的优雅方案,但这是我一直在思考的一个问题,并且我一直在寻找更好的解决方案.

有关编译与链接的详细信息,请参阅此Google网上论坛帖子:https://groups.google.com/forum/? fromgroups#!searchin/angular/compile $ 20link/angular/Ruwn5W3Q5I0/KJhcQJ_RNsIJ

您还可以在将来打开AngularUI项目的错误票.