如何将范围中的变量注入到 Angular 控制器中
How to inject a variable from scope into an Angular controller?
在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
- 不执行。
您可以在控制器中简单地分配值,或使用其他答案中的解决方案,例如watch
或timeout
延迟警报,$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的一些指导方针,以防止此类问题,请参阅此处的示例。试试看,告诉我进展如何。
相关文章:
- 正在将lodash注入Angular提供程序
- 是否可以将服务注入Angular 1.5组件's templateUrl属性
- $injector:modulerr将自定义模块注入Angular应用程序
- 如何在单元测试中注入Angular控制器
- 在 Karma/Jasmine 单元测试中注入 Angular $timeout服务的真实实现
- 正在注入Angular模块:未知提供程序
- Ionic 2-导入/注入Angular 2 HTTP组件
- 只有在需要时才向控制器注入Angular服务
- 将模块.factory注入angular.js中的另一个模块的最佳方式
- 在AngularJS模块中包装javascript类并注入angular服务的正确方式
- 如何正确注入angular服务
- 如何将html注入Angular UI引导弹出窗口
- 在注入angular服务时运行同一段代码
- 依赖注入Angular 2
- 注入angular消息依赖失败的angular js
- 有没有可能在运行时使用angularAMD惰性加载和注入angular模块?
- 组件不能解析$scope注入(angular 1.3.16)
- 将angularjs服务注入Angular
- 将$http注入angular“;使用严格的“;服务
- 将依赖项注入 Angular 服务进行测试