Javascript 一次性绑定在自定义AngularJS指令内不起作用
我想弄清楚为什么这个代码示例中的指令中的一次性绑定值(obj.value)正在更新 如预期的那样,更新第一个字段将只更新指令内的绑定值一次。之后,在指令内部,单击“编辑”时,它还将更新一次性绑定值,并更新父范围。再次更新第一个字段不会更改指令内的值Javascript 一次性绑定在自定义AngularJS指令内不起作用,javascript,angularjs,Javascript,Angularjs,我想弄清楚为什么这个代码示例中的指令中的一次性绑定值(obj.value)正在更新 如预期的那样,更新第一个字段将只更新指令内的绑定值一次。之后,在指令内部,单击“编辑”时,它还将更新一次性绑定值,并更新父范围。再次更新第一个字段不会更改指令内的值 <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular.min.js"></
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular.min.js"></script>
</head>
<body ng-app="myApp" ng-controller="myCtrl" ng-model-options="{updateOn: 'blur'}">
Enter value here first, then press edit:<br>
<input type="text" ng-model="t.value"><br>
<br>
Press edit, change the value and press copy:
<my-directive obj="t"></my-directive><br><br>
<script>
var myApp = angular.module('myApp', []);
myApp.directive('myDirective', function() {
var directive = {};
directive.restrict = 'E';
directive.template = '<div ng-switch="edit">\
<div ng-switch-default>[{{ ::obj.value }}]<button ng-click="toggle()">edit</button></div>\
<div ng-switch-when="true">\
<input type="text" ng-model="clone.value">\
<button ng-click="copy()">copy</button>\
</div>\
</div>';
directive.scope = {
obj: '='
};
directive.controller = function($scope) {
$scope.edit = false;
$scope.toggle = function() {
$scope.edit = true;
$scope.clone = angular.copy($scope.obj);
}
$scope.copy = function() {
$scope.obj = angular.copy($scope.clone);
$scope.edit = false;
}
}
return directive;
});
myApp.controller('myCtrl', function(){
});
</script>
</body>
首先在此处输入值,然后按编辑:
按编辑,更改值,然后按复制:
var myApp=angular.module('myApp',[]);
myApp.directive('myDirective',function(){
var指令={};
directive.restrict='E';
指令.template=\
[{{::obj.value}}]编辑\
\
\
抄袭\
\
';
指令范围={
对象:'='
};
directive.controller=函数($scope){
$scope.edit=false;
$scope.toggle=函数(){
$scope.edit=true;
$scope.clone=angular.copy($scope.obj);
}
$scope.copy=函数(){
$scope.obj=angular.copy($scope.clone);
$scope.edit=false;
}
}
返回指令;
});
myApp.controller('myCtrl',function(){
});
在1.3中,他们添加了一个新的语法来帮助单向绑定,“:”。因此,您只需要将指令实现更改为
obj=“::t”
以下是您的plnkr的更新:
这里有一篇很好的文章解释了这是因为ng开关。每次重新计算它的表达式时,指令都会被“重绘”。每次都是这样,一次性表达式也会重新计算 如果将模板更改为:
directive.template = '{{::obj | json}}<div ng-switch="edit">
etc...
directive.template='{{{::obj | json}
等
您将看到它不会改变,因为它位于ng开关之外。您想做什么?根据plunker,这是应该发生的。我想了解为什么指令中的::obj.value不断更新。您好,但direct中的值仍然会更新,并且它还有一个“:”前缀。您的指令实现看起来像
正确吗?在我的plnkr中,它工作正常。指令模板中有一个::obj.value
。即使使用您的解决方案,此字段也会不断更新。有什么想法吗?把它从家长那里拿走。你只想把它写在指令上。因此,您只能在
上使用:
谢谢,我已将其更改为ngShow和ngHide,并且单向绑定可以工作。ngIf表现出与预期相同的行为。至少可以说是令人困惑。