Javascript 作为语法的控制器不会更改控制器';s变量值
我第一次尝试将控制器作为语法实现,但遇到了一个问题,即我的函数没有更改从模板传递的控制器变量。相反,它将参数理解为局部变量。如果我使用$scope,就不会发生这种情况 这是我的控制器Javascript 作为语法的控制器不会更改控制器';s变量值,javascript,angularjs,Javascript,Angularjs,我第一次尝试将控制器作为语法实现,但遇到了一个问题,即我的函数没有更改从模板传递的控制器变量。相反,它将参数理解为局部变量。如果我使用$scope,就不会发生这种情况 这是我的控制器 angular .module('app') .controller('baseCtrl', baseCtrl); function baseCtrl() { base = this; base.myVar = 'string_1'; base.myFunction = myFu
angular
.module('app')
.controller('baseCtrl', baseCtrl);
function baseCtrl() {
base = this;
base.myVar = 'string_1';
base.myFunction = myFunction;
function myFunction(value) {
value = 'string_2"';
}
}
这是我的模板
<div ng-controller="baseCtrl as base">
<button ng-click="base.myFunction(base.myVar)">Button</button>
</div>
按钮
单击base之后,myVar应该从“string_1”更改为“string_2”,但这不会发生
有人知道我是怎么想出来的吗
base.myVar = "string2"
这将修复它可以这样做,在代码中做一些更改
angular
.module('应用程序',[])
.controller('baseCtrl',function(){
var base=此;
base.myVar='string_1';
base.myFunction=myFunction;
函数myFunction(值){
值='string_2';
base.myVar=值
警报(值);
}
});
按钮
您必须分配
base.myVar = 'string"';
在myFunction中定义模块应用程序,如下所示:-
angular.module('app',[]);
这是经过修改的代码,可以正常工作
angular
.module('app', [])
.controller('baseCtrl', baseCtrl);
function baseCtrl() {
var base = this;
base.myVar = 'string_1';
base.myFunction = myFunction;
function myFunction(value) {
base.myVar = 'string_2"';
}
}
我终于找出了问题所在。问题是我传递的变量是基元变量。解决方法是将我的变量从基元改为对象 因此,在我的案例中,解决方案是:
base.myVar = {
val: "string_1"
};
function myFunction(value) {
value.val = "string_2";
};
我需要全局使用这个函数…所以每次我通过一个参数,我需要改变相对的控制器变量。现在我看你要做的……也许它正在工作,但是角度不是在更新视图……考虑使用Sope.Apple幸运地它没有提供一个答案。它可能是错误的答案,但它肯定是一个ANSWE。R我需要的不是在函数中声明base.myVar,而是在base.myVar或我传递的任何其他变量中要索引的值。”如果我使用$scope,这不会发生" .. 为什么不呢,会有什么不同呢?你的函数仍然只是在改变一个局部变量,我想base可能是一个关键字或者JavaScript中的某个东西;也许这与此有关?