我已经阅读了两篇博客文章:first表示它有效,并以JSfiddle证明了这一点。 other says它仅适用于基元。
@estus响应后编辑:现在我复制了一份,因为排序不是一个不可变的函数。问题不同:控制器中的更改未反映在“单向视图”中,但它是双向的。
我已经和also made a JSFiddle进行了合作。我的单向数据绑定就像一个带有对象的双向 - 但正确地用于原始。当我使用ng-click创建$ digest()时,它可以工作,但不能直接在控制器创建时使用。怎么了 ?
家长:
<body ng-controller="AppCtrl">
<users-component users="users"></users-component>
<button ng-click = "check()">Check current users in Parent Ctrl</button>
</body>
JS:
function UserCtrl($scope){
console.log('Component users at the controller start :', this.users);
this.sorting = function(){
this.users = angular.copy(this.users).sort();
console.log('Component users after sorting :', this.users);
};
//Change does not appear on View with one-way, but does with Two-ways
this.users = angular.copy(this.users).sort();
console.log('users in component after controller creation', this.users);
}
angular.module("demo", [])
.controller('AppCtrl', function($scope){
$scope.users = ['John', 'Jim', 'Albert', 'Luc', 'Sheldon'];
$scope.check = function(){
console.log('Application Ctrl : current users', $scope.users);
}
})
.component("usersComponent", {
template: '<ul><li ng-repeat = "user in $ctrl.users">{{user}}</li></ul>'
+'<button ng-click="$ctrl.sorting()">Sort users in Component Ctrl</button>',
controller : UserCtrl,
bindings:{
users : '<'
}
});
请注意,我显示的示例还需要一个按钮ng-click()
来修改视图。
答案 0 :(得分:2)
单向绑定在这里不是问题,它可以像原语和对象一样宣传。
引起的sort()方法对数组中的元素进行排序并返回 数组。
this.users
范围内的 usersComponent
和$scope.users
范围内的AppCtrl
指的是同一个对象。一旦使用this.users.sort()
进行排序(this.users = ...
此处不执行任何操作),就会在两个范围中对其进行修改。要更改此行为,请修改副本而不是原始对象:
function UserCtrl($scope){
console.log('Component users at the start :', this.users);
this.users = angular.copy(this.users).sort();
}