angularjs - ui.bootstrap.tpls 覆盖 template/datepicker/popup.html 模板

标签 angularjs twitter-bootstrap datepicker ui.bootstrap

我创建了一个新的 template/datepicker/popup.html 模板,该模板在 ui.bootstrap.tpls 之后加载。

我正在努力解决的是在新模板中从 ng-click 调用函数。我不想更新 ui.bootstrap.tpls 文件。我尝试了两种不同的方法:

1) 不太理想: 使用 ui.bootstrap.tpls 指令 datepickerPopup 中已有的 select 函数。我可以通过转换为 .toLocaleDateString() 来使其部分工作,但在第一次单击后,我再次打开日历,日历仍然显示当前日期,而不是反射(reflect)更新的日期。

"<button class='btn btn-default' ng-click='select(date.setTime(date.getTime()+30 * 86400000).toLocaleDateString())'>30 days</button>" +

2) 理想:在 ui.bootstrap.tpls 之外创建一个名为 addDays(n) 的全新函数。我无法从新模板中访问此功能。我想创建自己的函数以从新模板调用。

"<button class='btn btn-default' ng-click='addDays(date, 30)'>30 days</button>" +

笨蛋:

http://plnkr.co/edit/Klbek5SpOGIA4FXTmlFX?p=preview

最佳答案

今天我花了更多时间来解决这个问题,并为我自己的问题找到了解决方案。

当您覆盖模板时,将 ng-controller="ControllerName"添加到外部元素(在我的例子中是 div)。然后您需要将 Controller 添加到模块中,在我的解决方案中,我只是将 Controller 添加到 popupTemplate.js 中。

更新了 Plunker: http://plnkr.co/edit/YLJW2imcDAbzwsvp58Rl

Javascript 文件名 popupTemplate.js。代码:

(function() {
'use strict';

angular.module("template/datepicker/popup.html", [])

.run(["$templateCache", function($templateCache) {
$templateCache.put("template/datepicker/popup.html",
    "<div ng-controller='ExampleCtrl'>" +
        "<ul class=\"dropdown-menu\"  ng-style=\"{display: (isOpen && 'block') || 'none', top: position.top+'px', left: position.left+'px'}\" ng-keydown=\"keydown($event)\">\n" +
        "   <li ng-transclude></li>\n" +
        "   <li ng-if=\"showButtonBar\" style=\"padding:10px 9px 2px\">\n" +
        "       <span class=\"btn-group pull-left\">\n" +
        "           <button type=\"button\" class=\"btn btn-sm btn-info\" ng-click=\"select('today')\">{{ getText('current') }}</button>\n" +
        "           <button type=\"button\" class=\"btn btn-sm btn-danger\" ng-click=\"select(null)\">{{ getText('clear') }}</button>\n" +
        "       </span>\n" +
        "       <button type=\"button\" class=\"btn btn-sm btn-success pull-right\" ng-click=\"close()\">{{ getText('close') }}</button>\n" +
        "   </li>\n" +
        "</ul>\n" +
        "<div class=\"dropdown-menu-extend\" ng-style=\"{display: (isOpen && 'block') || 'none', top: position.top+'px'}\">" +
        "<h4 >or select a future date here...</h4>" +
            "<div class='col-lg-6'>" +
                "<h5>Add a new function</h5>" +
                "<button class='btn btn-default' ng-click='select(addDays(date, 30))'>30 days</button>" +
            "</div>" +
        "</div>" +
    "</div>" +
    "");
}])
.controller('ExampleCtrl', function ($scope) {
  $scope.addDays = addDays;

  function addDays(date, days) {
    var newDate = date.setTime(date.getTime()+days * 86400000); //epoch date
    var finalDate = new Date(newDate); //formatdate
    console.log(finalDate);
    return finalDate;
  }
});

})();

关于angularjs - ui.bootstrap.tpls 覆盖 template/datepicker/popup.html 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29420537/

相关文章:

jquery - Bootstrap 模态 + 日期选择器 + 表单值

jQuery UI Datepicker - 出生日期 - 年份未正确选择

javascript - Angular——从另一个 Controller 调用特定于 Controller 的函数的最佳做法是什么?

angularjs - 推送状态在 AngularJS 中显示错误

javascript - 使用指令内的服务?

javascript - 无法将 jquery "on click"与 bootstrap carousel 一起使用

jquery - Bootstrap 模态。使用 Jquery 动态包含图像

javascript - ng-mouseover 上的 Angular JS 更改类

javascript - 我怎样才能让这个日期选择器在我的表单中居中?

javascript - Jquery Bootstrap Datepicker禁用过去的日期并且不自动填充输入框