Javascript 带导轨的AngularJS不';我不认识$scope

Javascript 带导轨的AngularJS不';我不认识$scope,javascript,ruby-on-rails,angularjs,Javascript,Ruby On Rails,Angularjs,我正在Rails中做一个项目,它也使用AngularJS。 首先,我有一个名为@resource的变量,它包含一个结束时间 <input style="display:none" ng-model="remainingTime" ng-init="remainingTime = <%= (resource.available_until.to_f - DateTime.now.to_f).to_i %>"> 当我想从控制器访问时,变量显示“undefined”:/ 任何

我正在Rails中做一个项目,它也使用AngularJS。 首先,我有一个名为@resource的变量,它包含一个结束时间

<input style="display:none" ng-model="remainingTime" ng-init="remainingTime = <%= (resource.available_until.to_f - DateTime.now.to_f).to_i %>">
当我想从控制器访问时,变量显示“undefined”:/

任何帮助都是有用的。谢谢你

编辑:

console.log($scope):

剩余时间=-39698

-负数是正确的-

编辑2: 完整控制器:

;(function () {
  'use strict';

  // Define controller
  function UserEvaluationsNewCtrl ($log, $scope) {
    $log.debug('UserEvaluationsNewCtrl: Hi')
    var vm = this

    vm.data = angular.extend({}, rails_data || {})
    vm.evaluationData = vm.data.resource
    vm.evaluationDataStringified = ''

    $scope.$watch(function(){
      return vm.evaluationData
    }, function(newValue, oldValue){
      vm.evaluationDataStringified = angular.toJson(newValue)
      $log.debug('ResourcesNewCtrl: $watch vm.evaluationDataStringified: to JSON output:', vm.evaluationDataStringified)
    }, true)

    console.log($scope)
  }

  // Inject dependencies
  UserEvaluationsNewCtrl.$inject = ['$log', '$scope']

  // Register controller
  angular
    .module('app.controllers.user_evaluations.new', [])
    .controller('UserEvaluationsNewCtrl', UserEvaluationsNewCtrl)
})();

我认为正在发生的是:

  • 控制器初始化空值
  • 您已将您的
    div
    连接到变量,该变量不可能有
  • 您已为未连接到的
    字段指定了一个值
    $scope.remainingTime
    变量
  • 尝试使用以下更改,该更改应执行以下操作:

     function UserEvaluationsNewCtrl ($log, $scope) {
        console.log($scope.remainingTime)
    }
    
  • 在html页面初始化(在控制器初始化后完成)中使用
    
    
  • 您可能能够(应该能够?)在real
    字段上同时使用
    ng init
    ng model
    ,但我这样做的结果不确定


    干杯,Gary。

    原因:控制器是在将
    remainingTime
    变量添加到$scope对象之前创建的。不要信任您的
    控制台。使用对象记录

    解决方案:

  • 使用$watch

    $scope.$watch('remainingTime',function(){
    警报($scope.remainingTime);
    });

  • 或者使用$timeout

    $timeout(函数(){
    警报($scope.remainingTime);
    });


  • 当您记录
    $scope
    时,您会得到什么?您能否将
    控制台.log(test)
    行更改为
    控制台.log($scope)
    ,并用您输入的结果更新问题get@Subash好啊编辑@Subash PD:负数是correctry
    console.log($scope.formCtrl.remainingTime)
    谢谢您的回答!。我用你的澄清编辑了这个问题。问题几乎是一样的:(有什么想法吗?没错,警报显示了正确的剩余时间,但如何在函数中使用该变量?真的$scope.remainingTime包含时间?作为倒计时函数的参数传递时,该变量不存在(未定义)我成功了!我调用了函数而不是警报!非常感谢!
    <input style="display:none" ng-init="remainingTime = <%= (resource.available_until.to_f - DateTime.now.to_f).to_i %>)" />
    <div >
       <input ng-model="remainingTime"> 
    </div>