离线调用同一个控制器中的另一个方法是不确定的?

时间:2016-01-31 23:47:51

标签: angularjs ionic-framework angularjs-ng-change

我有这样简单的离子模板:

    <ion-item class="range range-calm">Shift {{shiftval}}: 
        <input ng-change="shiftChange()" type="range" ng-model="shiftval" min="1" max="25">
    </ion-item>
        <span class="input-label">In</span>
        <input type="text" ng-model="decripted" id="dec" ng-change="change()" />
    </label>
        <span class="input-label">Out</span>
        <input type="text" ng-model="encripted" />
    </label>

使用这样的控制器逻辑:

.controller('mylog', function($scope) {
    var shiftval = ( typeof shiftval === 'undefined' ) ? 13 : shiftval;
    $scope.change = function(){
        this.decripted = this.decripted.toUpperCase();
        this.encripted = cezarCipher(this.decripted, shiftval);
    };
    $scope.shiftChange = function(){
        shiftval = this.shiftval;
        $scope.change();
    };
})

在我试图调用$scope.change();的最后一行,只是为了触发事件并再次重新渲染文本,我得到这样的错误:

在该fn。

中的.toUpperCase()行上的

Cannot read property 'toUpperCase' of undefined

如果有人知道如何克服这个问题,我将非常感谢!

2 个答案:

答案 0 :(得分:1)

尝试给$scope.decripted一个初始值,它可能是第一次在控制器中触发$scope.change函数时未设置的。

由于decripted未定义,因此尝试在其上调用函数toUpperCase()将触发错误,因为它不是字符串。

答案 1 :(得分:0)

您应该在ng-model

中将参数作为function传递
<input type="text" ng-model="decripted" id="dec" ng-change="change(decripted)" />

和你的controller一样

$scope.change = function(decripted){
   var decripted = decripted.toUpperCase();
   encripted = cezarCipher(decripted, shiftval);
};