我试图通过在 setTimeout 函数中编辑范围来触发 ng-show。setTimeout 是数据库查询回调的占位符。
索引.html:
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>
<script src="script.js"></script>
<div ng-controller="c1">
<div ng-show="{{show}}" >
test it
</div>
</div>
脚本.js:
var amTestNgShow = angular.module('amTestNgShow',[]);
amTestNgShow.controller('c1', ['$scope', function($scope) {
// this works: $scope.show = true;
setTimeout(function(){
$scope.show = true; // works not
// does not help: $scope.$apply();
}, 1000)
}]);
这在 setTimeout 内如何实现?谢谢!
http://plnkr.co/edit/RPS2vZAlVfhliQKteSSK
更新:如上所述, setTimeout 不是问题,它仅用于生成可重现的 stackoverflow 问题。在我的项目中,我构建了一个服务:
amProject1.service('asBasic', ['$http', '$q', function($http, $q){
var asBasic = {};
asBasic.docName = '';
var doc = {};
asBasic.get = function(id){
var deferred = $q.defer();
$http({method:'GET', url: '/' + this.docName + '/' + id})
.success(function(data, status, headers, config){
if(data === undefined){
deferred.reject("The requested " + asBasic.docName + " was not found.")
}
doc = data;
deferred.resolve(doc);
})
.error(function(data, status, headers, config){
deferred.reject(status);
})
return deferred.promise;
}
return asBasic;
}]);
像使用它一样
amProject1.controller('acDoc1', ['$scope', '$routeParams', 'asBasic', function($scope, $routeParams, asBasic){
asBasic.docName = 'doc1';
// this works: $scope.show = true;
asBasic.get($routeParams._id)
.then(function(data){
$scope.doc1 = data;
$scope.show = true; // works not
// does not help: $scope.$apply();
// ...
}
// ...