AnguarJS 1.3使用一次性绑定手动更新绑定
AngualrJS 1.3 manually update binding with one time binding
我想在视图{{::vm.list}}中使用一次性绑定。这一切都很好。但是,单击一个按钮,我想刷新vm.list。
我似乎不知道如何手动触发vm.list进行更新。也许一次性约束不是答案?
下面是一个jsfiddle样板示例:http://jsfiddle.net/KamelJabber/e4nexvay/2/
(function () {
var c1 = function Controller1() {
var vm = this;
var addCount = 1;
vm.list = [{
Id: 1,
Text: "Blue One"
}, {
Id: 2,
Text: "Blue Two"
}, {
Id: 3,
Text: "Blue Three"
}];
vm.AddnRefresh = function () {
vm.list.push({
Id: vm.list.length,
Text: "Add " + addCount
});
addCount++;
//force a refresh of vm.list
}
};
var app = angular.module('myApp', []);
app.controller('Controller1', c1);
})();
<style> </style> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.13/angular.min.js"></script>
<div ng-app="myApp">
<div ng-controller="Controller1 as vm">
<p>
<input type="button" ng-click="vm.AddnRefresh();" value="Add" />
</p>
<div ng-repeat="l in ::vm.list">{{::l.Text}}</div>
<p></p>
<div>LOTS of other stuff going on causing digest updates so really don't want to update list unless "Add" is called"</div>
</div>
</div>
我参加聚会迟到了,但我还是要参加。
我已经在一个通知模块上工作了一段时间,它终于达到了1.0.0的状态,我觉得我可以开始推荐它了
角度绑定通知程序
你可以通过两种方式使用它;
- 为单个属性设置观察程序以更新多个绑定
- 手动
$broadcast
事件以刷新一次性绑定
我认为#2将是实现你所追求的最好的方式,这将是这样的:
<input type="button" ng-click="vm.AddnRefresh();" value="Add" />
<div ng-repeat="l in :refresh:vm.list">
{{::l.Text}}
</div>
请注意在一次性冒号之间添加的refresh
。这是想要触发数据刷新时将使用的key
。
您现在所需要做的就是更新AddnRefresh
方法,如下所示:
vm.addnRefresh = function () {
/** original implementation **/
$scope.$broadcast('$$rebind::refresh'); // where 'refresh' is the key used in the view.
};
$$rebind::
是角度绑定通知程序使用的内部事件命名空间
现在,您的视图已更新。
这里有一个jsBin展示了两种更新方式(1$watch&manual$broadcast)。
视图:
<div ng-if="!vm.status.reqRefresh">
<div ng-repeat="l in ::vm.list">{{::l.Text}}</div>
</div>
控制器:
vm.status = {
reqRefresh : false
};
vm.AddnRefresh = function () {
vm.list.push({
Id : vm.list.length,
Text : "Add " + addCount
});
addCount++;
//force a refresh of vm.list
vm.status.reqRefresh = true;
$timeout(function () {
vm.status.reqRefresh = false;
});
}
请在此处查看更新的小提琴:http://jsfiddle.net/karank007/e4nexvay/143/
您必须使用$scope
才能查看更新后的视图。我刚刚将vm
添加到Scope中。这是代码:
(function () {
var c1 = function Controller1($scope) {
$scope.vm = this;
var addCount = 1;
$scope.vm.list = [{
Id: 1,
Text: "Blue One"
}, {
Id: 2,
Text: "Blue Two"
}, {
Id: 3,
Text: "Blue Three"
}];
$scope.vm.AddnRefresh = function () {
$scope.vm.list.push({
Id: $scope.vm.list.length,
Text: "Add " + addCount
});
addCount++;
//force a refresh of vm.list
}
};
var app = angular.module('myApp', []);
app.controller('Controller1', c1);
})();
您还必须删除::
:
<div ng-app="myApp">
<div ng-controller="Controller1 as vm">
<p>
<input type="button" ng-click="vm.AddnRefresh();" value="Add" />
</p>
<div ng-repeat="l in vm.list">{{::l.Text}}</div>
<p></p>
<div>LOTS of other stuff going on causing digest updates so really don't want to update list unless "Add" is called"</div>
</div>
</div>
相关文章:
- Angular:更新一次性绑定的数据
- AngularJS 1.5.x服务未正确绑定,并且未在控制器中更新
- 使用Knockout自定义绑定更新JSTree
- 淘汰赛JS;绑定值未更新或 ko.computed() 未更新
- Angular $scope更新、导航和 $scope.$apply() 后不绑定到视图
- AngularJS绑定仅在更改后更新
- AngularJS:ng-model 绑定在使用 jQuery 更改时不会更新
- AngularJS绑定模型以选择更新输入数字字段,最小值为最大值
- knockout.js获胜't更新我的foreach绑定,尽管更改已注册
- Knockout自定义绑定不会't更新
- 由其他Ember Select填充的Ember Select不更新选择绑定
- 具有敲除数据绑定的TinyMCE将180;t更新
- 当通过Ajax成功回调更新可观察数组时,启用绑定中断
- Knockout JS值不显示/绑定/更新,但可通过ko.toJS($data).value获得
- 使用自定义绑定更新元素文本
- 如何在使用sap.ui.model.json.JSONModel向数组添加元素时强制进行绑定更新
- 淘汰:自定义绑定更新不触发计算字段
- 聚合物属性没有通过数据绑定更新
- 当css绑定更新时,Textarea失去值
- 如何使用自定义绑定更新/筛选基础可观察值