为什么$render从不接到电话
Why $render never gets call
我有以下代码片段。
<!DOCTYPE html>
<html ng-app="exampleApp">
<head>
<title>CustomForms</title>
<script src="angular.js"></script>
<link href="bootstrap.css" rel="stylesheet" />
<link href="bootstrap-theme.css" rel="stylesheet" />
<script type="text/ng-template" id="triTemplate">
<div class="well">
<div class="btn-group">
<button class="btn btn-default">Yes</button>
<button class="btn btn-default">No</button>
<button class="btn btn-default">Not Sure</button>
</div>
</div>
</script>
<script>
angular.module("exampleApp", [])
.controller("defaultCtrl", function ($scope) {
$scope.dataValue = "Not Sure";
})
.directive("triButton", function () {
return {
restrict: "E",
replace: true,
require: "ngModel",
template: document.querySelector("#triTemplate").outerText,
link: function (scope, element, attrs, ctrl) {
element.on("click", function (event) {
setSelected(event.target.innerText);
scope.$apply(function () {
ctrl.$setViewValue(event.target.innerText);
});
});
var setSelected = function (value) {
var buttons = element.find("button");
buttons.removeClass("btn-primary");
for (var i = 0; i < buttons.length; i++) {
if (buttons.eq(i).text() == value) {
buttons.eq(i).addClass("btn-primary");
}
}
}
ctrl.$render = function () {
console.log("render");
setSelected(ctrl.$viewValue || "Not Sure");
}
}
}
});
</script>
</head>
<body ng-controller="defaultCtrl">
<div><tri-button ng-model="dataValue"/></div>
<div class="well">
Value:
<select ng-model="dataValue">
<option>Yes</option>
<option>No</option>
<option>Not Sure</option>
</select>
</div>
</body>
</html>
当我更改选择选项的值时,ctrl.$render 被调用,但为什么当我单击按钮时,ctrl.$render 永远不会被调用?
仅
当$viewValue
具有与模型不同的值时,才会调用$render
。在您的情况下,当调用$setViewValue
时,它将首先设置$viewValue
,然后将模型设置为相同的值。因为$viewValue
是先更新的,所以当 AngularJS 获取模型更改时,它会看到$viewValue
具有相同的值,因此不会调用$render
。
如果要调用$render
,请像@SoluableNonagon指出的那样强制调用它,或者修改单击处理程序以更改模型而不是调用$setViewValue
。这是演示后一种方法的 plunkr:http://plnkr.co/edit/uAqSxsAd49FkXa5Yu5Vs?p=preview。相关的代码段是:
var ngModelSet = $parse(attrs.ngModel).assign
element.on("click", function (event) {
setSelected(event.target.innerText);
scope.$apply(function () {
ngModelSet(scope, event.target.innerText)
})
});
强制它怎么样?为什么不在单击事件中调用呈现函数?
element.on("click", function (event) {
setSelected(event.target.innerText);
scope.$apply(function () {
ctrl.$setViewValue(event.target.innerText);
});
ctrl.$render();
});
相关文章:
- 使用电话间隙在Android应用程序中显示SQL Lite的数据
- 带有加号的电话号码验证(可选)
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 在没有'我没有接到电话
- 反应在render()外部添加子对象
- 正则表达式,用于在 JavaScript 中为电话号码添加短划线
- 通过Javascript将HTML中的电话号码与URL参数进行交换
- Javascript/Ajax:通过点击按钮检查有效的电子邮件和电话号码
- Laravel 4 render() PDF with Javascript
- 如何将页面上的所有电话号码更改为可点击链接,不包括特定类别的元素
- PhoneGap onclick没有接到电话
- 在主干视图中调用render()方法的好方法
- 验证澳大利亚的电话号码
- iScroll不断向上滚动(电话间隙)
- 使用javascript验证电话号码无效
- Regex表示8位电话号码(新加坡号码长度)
- HTML文本框,它接受电话号码,并以美国电话号码格式显示
- 谷歌广告词转换电话
- React.render error
- 为什么$render从不接到电话