AngularJS 隔离范围内的指令双向绑定未反映在父范围内
AngularJS Directive two way binding in isolated scope not reflecting in parent scope
我正在尝试将范围数组元素传递给指令并更改指令内该元素的值,但是当我打印范围元素的值时,指令内所做的更改不会影响父级范围。我创建了隔离范围并在范围内使用 '='
提供了两种绑定方式,但它没有对父范围进行任何更改。
附加代码
Index.html
<div ng-app="dr" ng-controller="testCtrl">
<test word="word" ng-repeat="word in chat.words"></test>
<button ng-click="find();">
click
</button>
</div>
Javascript部分
var app = angular.module('dr', []);
app.controller("testCtrl", function($scope) {
$scope.chat= {words: [
'first', 'second', 'third'
]};
$scope.find = function(){
alert(JSON.stringify($scope.chat, null, 4));
}
});
app.directive('test', function() {
return {
restrict: 'EA',
scope: {
word: '='
},
template: "<input type='text' ng-model='word' />",
replace: true,
link: function(scope, elm, attrs) {
}
}
});
我的大部分搜索返回将 '='
放在指令范围内将解决问题,但运气不好。任何人都可以指出问题是什么,我如何反映父范围中的值。
您向指令传递了一个字符串,但未引用该字符串,因为它不再与您的数组相关
我想你必须正确地改变你的数组
像下面这样的东西应该可以工作:
var app = angular.module('dr', []);
app.controller("testCtrl", function($scope) {
$scope.word = 'test';
$scope.chat= {words: [
{'name':'first'}, {'name': 'second'}, {'name' : 'third'}
]};
$scope.find = function(){
alert(JSON.stringify($scope.chat, null, 4));
}
});
app.directive('test', function() {
return {
restrict: 'EA',
scope: {
word: '='
},
template: "<input type='text' ng-model='word.name' />",
replace: true,
link: function(scope, elm, attrs) {
}
}
});
<div ng-app="dr" ng-controller="testCtrl">
<pre>{{chat.words}}</pre>
<test word="word" ng-repeat="word in chat.words"></test>
<button ng-click="find();">
click
</button>
</div>
使用单向 (<
) 绑定可以提高指令的效率:
app.directive('test', function() {
return {
restrict: 'EA',
scope: {
̶w̶o̶r̶d̶:̶ ̶'̶=̶'̶
word: '<'
},
template: "<input type='text' ng-model='word.name' />",
replace: true,
link: function(scope, elm, attrs) {
}
}
});
单向 (<
) 绑定还有一个额外的优势,即它可以与 $onChanges
life-cyle hook.
一起使用
我正在尝试将范围数组元素传递给指令并更改指令内该元素的值,但是当我打印范围元素的值时,指令内所做的更改不会影响父级范围。我创建了隔离范围并在范围内使用 '='
提供了两种绑定方式,但它没有对父范围进行任何更改。
附加代码
Index.html
<div ng-app="dr" ng-controller="testCtrl">
<test word="word" ng-repeat="word in chat.words"></test>
<button ng-click="find();">
click
</button>
</div>
Javascript部分
var app = angular.module('dr', []);
app.controller("testCtrl", function($scope) {
$scope.chat= {words: [
'first', 'second', 'third'
]};
$scope.find = function(){
alert(JSON.stringify($scope.chat, null, 4));
}
});
app.directive('test', function() {
return {
restrict: 'EA',
scope: {
word: '='
},
template: "<input type='text' ng-model='word' />",
replace: true,
link: function(scope, elm, attrs) {
}
}
});
我的大部分搜索返回将 '='
放在指令范围内将解决问题,但运气不好。任何人都可以指出问题是什么,我如何反映父范围中的值。
您向指令传递了一个字符串,但未引用该字符串,因为它不再与您的数组相关 我想你必须正确地改变你的数组
像下面这样的东西应该可以工作:
var app = angular.module('dr', []);
app.controller("testCtrl", function($scope) {
$scope.word = 'test';
$scope.chat= {words: [
{'name':'first'}, {'name': 'second'}, {'name' : 'third'}
]};
$scope.find = function(){
alert(JSON.stringify($scope.chat, null, 4));
}
});
app.directive('test', function() {
return {
restrict: 'EA',
scope: {
word: '='
},
template: "<input type='text' ng-model='word.name' />",
replace: true,
link: function(scope, elm, attrs) {
}
}
});
<div ng-app="dr" ng-controller="testCtrl">
<pre>{{chat.words}}</pre>
<test word="word" ng-repeat="word in chat.words"></test>
<button ng-click="find();">
click
</button>
</div>
使用单向 (<
) 绑定可以提高指令的效率:
app.directive('test', function() {
return {
restrict: 'EA',
scope: {
̶w̶o̶r̶d̶:̶ ̶'̶=̶'̶
word: '<'
},
template: "<input type='text' ng-model='word.name' />",
replace: true,
link: function(scope, elm, attrs) {
}
}
});
单向 (<
) 绑定还有一个额外的优势,即它可以与 $onChanges
life-cyle hook.