【发布时间】:2016-03-09 19:26:56
【问题描述】:
我的 HTML 中有以下内容:
<body ng-controller = "Control as control">
<button ng-click = "control.prepareAction()">Do Action </button>
<div id="one" ng-hide = "!control.showOne" >
<div>
<h6> {{control.name}}</h6>
<p> Bills Sponsored: {{control.count}} <p>
</div>
</body>
在我的 Javascript 中:
var vm = this;
vm.name = "My Name"
vm.prepareAction = function(){
action(parseFirst(), parseLast()); //The two parse functions simply get values from an HTML form. This works correctly.
}
function action(first, last) {
$.post('php/one.php', {
first: first,
last: last
},
function(data) {
create(JSON.parse(data));
});
return values;
}
function create(data) {
var countArray = data[0];
vm.count = countArray[0];
vm.showOne = true;
}
此函数不会更新 HTML 中 showOne(div 始终隐藏)或 count(当我将 ng-hide 设置为 false 时为空白)的值。但是,当我将 ng-hide 设置为 false 时,它会正确显示名称。这让我认为这是一个范围问题,但是,当我将 vm 的值打印到控制台时,showOne 和 count 的值是正确的。 Chrome ng-inspector 扩展程序证实了这一点。
【问题讨论】:
-
您需要检查几件事,首先检查发布请求是否成功以及是否正在调用创建函数,并检查是否使用 $.post 使用 Angular 的 $http 服务。并尝试在 create 函数的最后一行使用 $scope.$apply() 如果它有效,那么显然这是 $.post 本身的问题。
-
我可以肯定地确认 create 正在被调用,因为当我 console.log(vm) 显示正确的计数值并将 showOne 显示为 true 时。我还应该尝试 Angular 的 HTTP 吗?
标签: javascript angularjs controller