我有一个控制器,使用ul
在ng-repeat
打印一些数据。每个li
分为两部分:
<li>
<div>
<button type="button" class="some classes" ng-show="!field.edit.state" ng-click="field.edit.update(true)">Edit</button>
<button type="button" class="some classes" ng-show="field.edit.state" ng-click="field.edit.update(false)">Save</button>
{{field.title}}
</div>
<div ng-show="field.edit.state">
<input />
</div>
这个想法是,当点击“编辑”按钮时,会显示input
字段和“保存”按钮,而隐藏“编辑”按钮本身。点击“保存”按钮就可以了。由于我需要在编辑的开始和结束时执行一些函数,update
也会从我的控制器触发一些回调。现在,回调被正确触发,状态被更新,但我的页面上没有任何变化。
更新功能代码非常简单:
function registerEdit(callback){
var state = false;
var update = function(newState){
state = newState;
callback(newState)
$timeout(function(){
$scope.$apply()
})
}
return {
state : state,
update : update
}
}
当从服务器获取数据并将其注入registerEdit
时,每个字段元素都会注入其自己的$scope
属性,因此它们是唯一的(我已经检查过该部分,并且它可以正常工作) 。根据我对Angular的了解,在更改$scope
之后我需要做的就是调用$apply
函数让Angular改变我的视图,但即使状态改变(我记录了)显示保持不变。