【问题标题】:How to inject a variable from scope into an Angular controller?如何将范围内的变量注入 Angular 控制器?
【发布时间】:2016-03-02 08:47:38
【问题描述】:

index.html 中,我正在做这样的事情:

<div ng-controller="MyController">
    <div ng-model="pk" ng-init="pk='2'"></div>
</div>

无论如何,在我的 angular 文件中,我正在做这样的事情:

.controller('MyController', [
  '$scope', function($scope) {
    alert('Sup ' + $scope.pk);
  }
])

假设一个 URL 的 pk 是 2,我希望看到这样的结果:

晚餐 2

但是,我的输出是这样的:

支持未定义

我做错了什么?谢谢!

【问题讨论】:

  • 手动写ng-init="pk='2'"是否有效?
  • 不。这也不起作用:/
  • 所以你的问题与Django无关。
  • 我认为你应该使用 ng-value 而不是 ng-init
  • ng-value 也不起作用。哦,我更新了问题,让它更简单、更容易回答。

标签: javascript angularjs


【解决方案1】:

发生这种情况,因为控制器中的代码在视图中的代码之前执行,所以当运行时

alert('Sup ' + $scope.pk);

ng-init - 不执行。

因此,对于解决方案,您可以在控制器内部简单地赋值,或使用来自其他答案的解决方案,例如 watchtimeout

【讨论】:

    【解决方案2】:

    使用$timeout 延迟警报:

    .controller('myCtrl', [
      '$scope', '$timeout', function($scope, $timeout) {
        $timeout(function() 
          alert('Sup ' + $scope.pk);
        });
      }
    ]);
    

    【讨论】:

      【解决方案3】:

      使用$scope.$watch:

      .controller('MyController', ['$scope', function($scope) {
          $scope.$watch('pk', function(newValue, oldValue) {
              alert('Sup ' + newValue);
          });
      }]);
      

      您的alert('Sup ' + $scope.pk); 在视图初始化之前被调用,因此在ng-init 被调用之前。

      【讨论】:

        【解决方案4】:

        Angular 有一个技巧应该始终遵循:“始终在模型中使用点”。 例如:

        ng-model="models.pk"

        this answer 中查看更多信息。

        您还应该考虑关注一些guidelines from John Papa 以防止此类问题,请参阅here 一个示例。 试试看,告诉我结果如何。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-07-25
          • 1970-01-01
          • 2015-12-24
          • 1970-01-01
          • 1970-01-01
          • 2018-06-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多