Javascript setTimeout()在angularjs中不工作?

Javascript setTimeout()在angularjs中不工作?,javascript,html,angularjs,Javascript,Html,Angularjs,AngularJSs的新成员。想知道为什么setTimeout不起作用。它对AngularJS不起作用是真的吗 var myApp=angular.module('myApp',[]); 函数MyCtrl($scope){ //$scope.typeOptions=[]; 警报(“hi23”); $timeout(函数(){ 警报(“hi”); $scope.typeOptions= [ {name:'Feature',value:'Feature'}, {name:'Bug',value:

AngularJSs的新成员。想知道为什么
setTimeout
不起作用。它对AngularJS不起作用是真的吗


var myApp=angular.module('myApp',[]);
函数MyCtrl($scope){
//$scope.typeOptions=[];
警报(“hi23”);
$timeout(函数(){
警报(“hi”);
$scope.typeOptions=
[
{name:'Feature',value:'Feature'},
{name:'Bug',value:'Bug'},
{name:'Enhancement',value:'Enhancement'}
]; 
$scope.form=$scope.typeOptions[1]。值;
}, 3000);
}

谢谢。

您需要注入
$timeout
。观察以下变化

function MyCtrl($scope, $timeout) { 
    ....
}
有关更多信息,请参阅


此外,不建议使用这种声明控制器的方式。我会鼓励对以下内容进行重新细分

myApp.controller('MyCtrl', ['$scope', '$timeout', function($scope, $timeout) {
    .... 
}]);

Angular有一个观察者列表,它是将视图与其模型绑定在一起的所有变量和对象。Angular一直在侦听更改其中任何一个的事件,并开始一个摘要周期以使用新值更新DOM

使用setTimeout时,它会异步运行,并且Angular不会监视setTimeout中的所有代码,即使它可能正在更改Angular范围值之一

因此,您可以按照上面的建议使用$timeout,也可以将setTimeout代码包装在$scope.$apply中,这会告诉Angular也要注意它


对于Angular应用程序中可能使用的任何外部Jquery库,这也是一个很好的实践。尽管推荐的方法是为此类库使用角度包装。

除了sal niro所说的,您还需要启动控制器。角度.module('myApp').controller('MyCtrl',MyCtrl);谢谢大家!以下是使用您推荐的样式的工作版本的链接:这是一篇关于使用
$timeout
$interval
myApp.controller('MyCtrl', ['$scope', '$timeout', function($scope, $timeout) {
    .... 
}]);