控制器作为语法不会更改控制器的变量值

时间:2016-09-08 12:43:48

标签: javascript angularjs

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

有人知道我怎么能搞清楚吗?

4 个答案:

答案 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";
};