我正在使用AngularJS 1.3.3和jQuery 1.11.1。
以下内容未正确绑定到ng-repeat(意味着它不会将DOM绑定到数据或在更新数据时更新):
var aliasApp = angular.module('aliasApp', ['ngSanitize']);
aliasApp.controller('AliasController', function($scope) {
$scope.aliases = new Array();
$scope.setAliases = function(v){
var a = new Array();
if (Object.prototype.toString.call(v) === '[object Array]') {
for (var i = 0; i < v.length; i++) {
a.push(new Alias(v[i]));
}
$scope.aliases = a;
}
}
});
以下是JSFiddle http://jsfiddle.net/f6njo7sq/
中的BROKEN代码然而,把'#34;别名&#34;进入&#34;这个&#34;范围确实有效。
var aliasApp = angular.module('aliasApp', ['ngSanitize']);
aliasApp.controller('AliasController', function($scope) {
var self = this;
self.aliases = new Array();
$scope.setAliases = function(v){
var a = new Array();
if (Object.prototype.toString.call(v) === '[object Array]') {
for (var i = 0; i < v.length; i++) {
a.push(new Alias(v[i]));
}
self.aliases = a;
}
}
});
这是JSFiddle http://jsfiddle.net/86wduo52/
中的WORKING代码有谁知道为什么第二个有效,但第一个没有?
答案 0 :(得分:0)
aliasApp.controller('AliasController', function($scope) {
$scope.aliases = new Array();
var sc = $scope;
$scope.setAliases = function(v){
var a = new Array();
if (Object.prototype.toString.call(v) === '[object Array]') {
for (var i = 0; i < v.length; i++) {
a.push(new Alias(v[i]));
}
sc.aliases = a;
sc.$apply();
}
}
});
让我们看看这是否有效,它会引导我们思考。
答案 1 :(得分:0)
这里的关键是你如何接近$ scope。
你发布的JS代码很好。这是你破坏的HTML代码。
ng-repeat="alias in root.aliases"
错了,请尝试
ng-repeat="alias in aliases"
这是因为你正在寻找&#34;错误&#34;范围,第二段JS代码然后更改了别名对象所在的$ scope,而是将其放在根范围内。