如何将范围中的变量注入到 Angular 控制器中

How to inject a variable from scope into an Angular controller?

本文关键字:注入 Angular 控制器 变量 范围      更新时间:2023-09-26

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

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

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

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

因此,假设URL的pk是2,我希望看到如下所示的内容:

Sup 2

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

未定义

我做错了什么?谢谢!

发生这种情况,因为来自控制器的代码先于来自视图的代码执行,因此在运行时

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

ng-init - 不执行。

因此,对于解决方案,

您可以在控制器中简单地分配值,或使用其他答案中的解决方案,例如watchtimeout

延迟警报,$timeout:

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

使用 $scope.$watch

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

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

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

ng-model="models.pk"

在此答案中查看更多内容。

您还应该考虑遵循John Papa的一些指导方针,以防止此类问题,请参阅此处的示例。试试看,告诉我进展如何。