我试图首次将控制器实现为语法,我遇到的问题是我的函数没有改变我从模板传递的控制器变量。相反,它将参数理解为局部变量。如果我使用$ scope,就不会发生这种情况。
这是我的控制器。
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”,但这不会发生。
有人知道我怎么能搞清楚吗?
答案 0 :(得分:1)
可以这样做,在代码中做一些更改
angular
.module('app',[])
.controller('baseCtrl',function(){
var base = this;
base.myVar = 'string_1';
base.myFunction = myFunction;
function myFunction(value) {
value = 'string_2"';
base.myVar = value
alert(value);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="baseCtrl as base">
<input type="text" ng-model="base.myVar"/>
<button ng-click="base.myFunction(base.myVar)">Button</button>
</div>
答案 1 :(得分:1)
你必须分配
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"';
}
}
答案 2 :(得分:0)
base.myVar = "string2"
这将解决它
答案 3 :(得分:0)
我终于弄清楚出了什么问题。问题是我传递的变量是原始的。解决方案是将我的变量从原始变为对象。
所以在我的情况下,解决方案是:
base.myVar = {
val: "string_1"
};
function myFunction(value) {
value.val = "string_2";
};