Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 作为语法的控制器不会更改控制器';s变量值_Javascript_Angularjs - Fatal编程技术网

Javascript 作为语法的控制器不会更改控制器';s变量值

Javascript 作为语法的控制器不会更改控制器';s变量值,javascript,angularjs,Javascript,Angularjs,我第一次尝试将控制器作为语法实现,但遇到了一个问题,即我的函数没有更改从模板传递的控制器变量。相反,它将参数理解为局部变量。如果我使用$scope,就不会发生这种情况 这是我的控制器 angular .module('app') .controller('baseCtrl', baseCtrl); function baseCtrl() { base = this; base.myVar = 'string_1'; base.myFunction = myFu

我第一次尝试将控制器作为语法实现,但遇到了一个问题,即我的函数没有更改从模板传递的控制器变量。相反,它将参数理解为局部变量。如果我使用$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”,但这不会发生

有人知道我是怎么想出来的吗

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中的某个东西;也许这与此有关?