带有Rails的AngularJS无法识别$ scope

时间:2018-02-07 22:39:20

标签: javascript ruby-on-rails angularjs

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

<input style="display:none" ng-model="remainingTime" ng-init="remainingTime = <%= (resource.available_until.to_f - DateTime.now.to_f).to_i %>">

这将获得X任务的剩余时间,并显示如下(不显示无)。

A input with a remaining time

获得的值我必须从控制器访问它。

在控制器中我有以下内容:

 function UserEvaluationsNewCtrl ($log, $scope) {
    console.log($scope.remainingTime)
}

当我想从控制器访问时,变量显示“undefined”:/

任何帮助都很有用。谢谢!!!

编辑:

的console.log($范围): enter image description here

REMAININGTIME = -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)
})();

2 个答案:

答案 0 :(得分:1)

原因:在将remainingTime变量添加到$ scope对象之前,正在创建控制器。不要相信你的console.log对象。

解决方案:

  1. 使用$ watch

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

  2. 或使用$ timeout

    $timeout(function () { alert($scope.remainingTime); });

答案 1 :(得分:0)

我认为发生的事情是:

  1. 您的控制器初始化空值。
  2. 您已将div与变量连接起来,而该变量不可用。
  3. 您已为<input>字段分配了一个值,该字段未连接到该字段 $scope.remainingTime变量。
  4. 尝试使用下面的更改,该更改应执行以下操作:

    1. 在html页面init(在控制器初始化之后完成)使用<input ng-init= ...来设置remainingTime的值。
    2. <input>字段附加到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>
      
    3. 您可以(应该能够?)在真实的ng-init字段上同时使用ng-model<input>,但我确实有不确定的结果

      干杯,加里。