我发布了一些例子,因为我认为你更容易理解我的问题。
我有这个HTML标记
<div ng-app="autoDrops" ng-controller="testController as test">
<div ng-controller="simpleController as simple">
<a href="" ng-click="test.addValue(value, test.testValue)">Add</a>
<a href="" ng-click="test.addValue2(value2, test.testValue2)">Add2</a>
</div>
<a href="" ng-click="test.addValue(value, test.testValue)">Add</a>
<a href="" ng-click="test.addValue2(value2, test.testValue2)">Add2</a>
<p>
{{test.testValue}}
</p>
<p>
{{test.testValue2}}
</p>
<div>
和我的AngularJs控制器定义如下
var autoDrops = angular.module('autoDrops', []);
autoDrops.controller('testController', function ($scope) {
this.testValue = 0;
$scope.value = 1;
this.addValue = function(value, testValue){
//why function not work, if i remove this?
testValue = testValue + value;
}
$scope.value2 = {value:"1"};
this.testValue2 = [];
this.addValue2 = function(value, testValue2){
//this function work with this?
testValue2.push(value);
}
});
autoDrops.controller('simpleController', function ($scope) {
$scope.value = 1;
$scope.value2 = {value:"1"};
});
示例您可以看到jsfiddle
答案 0 :(得分:2)
正如@MMHunter所说,这是因为在第一种情况下你传递一个简单的值,而在第二种情况下,你传递一个数组。
数组通过引用传递,值按值传递。
所以,如果你想让它改变作品
this.testValue = 0;
至this.t = {testValue : 0};
test.addValue(value, test.testValue)
至test.addValue(value, test.t)
this.addValue = function(value, testValue){
//why function not work, if i remove this?
testValue = testValue + value;
}
到
this.addValue = function(value, t){
//why function not work, if i remove this?
t.testValue = t.testValue + value;
}
答案 1 :(得分:1)
当您未使用this
时,您没有更新范围变量,this.testValue = 0
会覆盖它,因此this.testValue
仍会打印0
答案 2 :(得分:0)
可能的解决方案之一是使用对象this
来更新值。
this.testValue = testValue + value;