【问题标题】:Value in Directive is undefined指令中的值未定义
【发布时间】:2016-08-19 01:59:30
【问题描述】:

我正在尝试获取模型传递的指令中的值。它在控制器中打印值,但在指令中它是未定义的。 附上代码sn-ps,出错的地方请更新。 非常感谢!!

A) MODEL 中的日期和时间输入类型 -

// 日期选择器

<div class="todo-details-inline">
    <span class="todo-header">Due date</span>
    <input type="text" 
           ng-model="vm.task.end_date" 
           top="45" name="endDate" 
           class="nc-input" 
           pickadate-picker date-input-format>
</div>

// 时间选择器

<div style="margin-left:10%;" class="todo-details-inline">
    <input ng-model="vm.task.end_time" 
           name="endTime" 
           time-input-format 
           time-picker 
           taskEndDate="vm.endDate" 
           placeholder="End Time" 
           class="nc-input">
</div>

B) 控制器中设置的vm.endDate

//在页面加载时

vm.endDate = vm.task.end_date;
logger.info('in activate,vm.endDate:'+vm.endDate); // prints correct value

// 观看 - 在 val 更新时

vm.endDate = vm.task.end_date;
console.log("updated vm.endDate:"+vm.endDate);   // prints correct value

c) 在指令中

angular
.module('app.layout')
.directive('timePicker', timePicker);

function timePicker($timeout) {
    var directive = {
        require: 'ngModel',
        scope: {
            from: '=',
            to: '@',
            format: '@',
            min: '=',
            initialTime: '=',
            selectTime: '=',
            taskEndDate:'='
        },
        link: function($scope, $element, $attrs, ctrl) {
          // OTHER CODE     

          $scope.$watch("taskEndDate", function(value) {
            console.log("taskEndDate value:"+value); // UNDEFINED ??
            if (value) {
                // FURTHER OPRTNs
            }
          }
        }
   };
}

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    在观看之前保留taskEndValue 的本地副本...有时您在实际获得价值之前观看传递的值。

    $scope.endDate = $scope.taskEndDate;
    $scope.$watch("endDate", function(value) {
        console.log("taskEndDate value:"+value);
        if (value) {
               ....
       }
    });
    

    然后查看链接中的局部变量。

    其次,您输入标签中的taskEndDate 区分大小写,这是错误的。

    <input ng-model="vm.task.end_time" 
               name="endTime" 
               time-input-format 
               time-picker 
               task-end-date="vm.endDate" 
               placeholder="End Time" 
               class="nc-input">
    

    【讨论】:

    • 感谢 Thalaivar :) 主要问题是输入标签中的 taskEndDate,更正为 task-end-date 工作
    猜你喜欢
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    相关资源
    最近更新 更多