Angularjs:将日历值从指令传递给控制器

时间:2015-12-08 10:01:32

标签: javascript angularjs angularjs-directive

我有这个设备预订系统,它有预订表格,其中包括带弹出日历的字段。因为我在ng-repeat中有这个日历弹出窗口,所以我为它创建了一个指令,所以它可以工作。

我的问题是,当我保存预订时,我无法将指令中的日历值传递给我的控制器。

我该怎么做?

这是保存功能:



$scope.Start = "";
$scope.saveReservation = function (newReservation, equipment) {
                $scope.$emit('WORKING', true);
                newReservation.EquipmentID = equipment.ID;
                newReservation.StartDate = $scope.Start;

                reservationService.addNew(newReservation)
                       .then(function (response) {
                           $scope.showReservationForm = false;
                           reservationService.getAll()
                             .then(function (response) {
                                 $scope.reservations = response.d.results;
                                 $scope.$emit('WORKING', false);
                                 alert("Your reservation was succesful.")
                             }, function (reason) {
                                 $scope.$emit('WORKING', false);
                                 alert('You reservation failed because of error ' + reason);
                             });

                       });
            };




这是指令:



"use strict";
(function () {
    angular.module("App").directive('myRepeatDirective', [
        function () {
            return {

                link: function (scope, element, attrs) {
                    if (scope.$last) {
                        $('.bootstrap-datepicker1').datepicker({
                            format: "dd/mm/yyyy",
                            autoclose: true
                        });
                        $('#bootstrap-datepicker1').on('change', function () {

                            scope.Start = $('#bootstrap-datepicker1').val()
                        });
                        $('.bootstrap-datepicker2').datepicker({
                            format: "dd/mm/yyyy",
                            autoclose: true
                        });
                        $('#bootstrap-datepicker2').on('change', function () {
                            scope.End = $('#bootstrap-datepicker2').val()
                        });
                    }
                }
            };
        }])
})();




这是输入:



<input style="width: 200px;" type="text" class="bootstrap-datepicker1" id="bootstrap-datepicker1" data-ng-model="Start" placeholder=" dd.mm.yyyy" />
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:0)

在指令定义对象上使用'scope'属性。

https://docs.angularjs.org/guide/directive

你也可以找到这个有用的

https://github.com/angular/angular.js/wiki/Understanding-Scopes

答案 1 :(得分:0)

从您的指令中,注入Error MSB3721 The command "xsd.exe cxx-tree --output-dir "." --hxx-suffix ".hxx" --cxx-suffix ".cxx" --ixx-suffix ".ixx" --fwd-suffix "-fwd.hxx" projectSchema.xsd" exited with code 1. 并在想要传递数据时进行广播:

$rootScope

现在,在您的控制器中,获取您想要接收的值:

$rootScope.$broadcast("calendarValue", {value: new Date(), foo: "bar"});

答案 2 :(得分:0)

使用范围。$ apply让角度知道值在角度范围之外变化。其他角度并不知道价值发生了变化。

$('#bootstrap-datepicker1').on('change', function () {
   scope.$apply(function(){
       scope.Start = $('#bootstrap-datepicker1').val()
   }) 
});