Angular $ scope不起作用

时间:2014-11-24 14:38:56

标签: javascript angularjs-scope this

我正在使用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代码

有谁知道为什么第二个有效,但第一个没有?

2 个答案:

答案 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,而是将其放在根范围内。