【发布时间】:2015-07-19 17:36:53
【问题描述】:
我正在处理的ng-model 有一点问题。
首先我将展示ng-model正常工作的部分
<input type="text"
ng-model="slip.risk"
ng-change="riskWinCalculations(slip, 'RISKSTRAIGHT')">
<input type="text"
ng-model="slip.win"
ng-change="riskWinCalculations(slip, 'WINSTRAIGHT')">
<strong>To Win: </strong>{{straightTotalWin | currency}}
<strong>Total Stake: </strong>{{straightTotalStake | currency}}
现在ng-model 对我不起作用的html
<input type="text"
ng-change="riskWinCalculations(null, 'RISKPARLAY')"
ng-model="riskParlay">
<strong>To Win: </strong>{{winParlay | currency}}
<strong>Total Stake: </strong>{{riskParlay | currency}}
在此控制器中,您将看到一个名为 applyParlayRisk 的函数给我带来了问题,而另一个名为 riskWinCalculations 的函数也给我带来了问题,其中的情况 RISKPARLAY 也给我带来了问题,其余的都像魅力一样工作
applyStraightRisk = function(slip) {
var moneyLine = _.result(_.find(slip.lines, {isSelected: '1'}), 'moneyLine');
slip.win = RiskWikCalculations.calculateStraightBet(slip.risk, parseFloat(moneyLine, 10), true);
},
applyStraightWin = function(slip) {
var moneyLine = _.result(_.find(slip.lines, {isSelected: '1'}), 'moneyLine');
slip.risk = RiskWikCalculations.calculateStraightBet(slip.win, parseFloat(moneyLine, 10), false);
},
applyParlayRisk = function(parlay, riskParlay) {
$scope.riskParlay = riskParlay;
console.log($scope.riskParlay);
//this logs UNDEFINED
$scope.winParlay = riskParlay * (parlay.payoutProportion || 4.5);
},
sumStraightStakes = function(betSlip) {
var totalStake = 0,
totalWin = 0;
_.each(betSlip, function(slip) {
if (slip.risk) {
totalStake += parseFloat(slip.risk, 10);
}
if (slip.win) {
totalWin += parseFloat(slip.win, 10);
}
});
$scope.straightTotalStake = totalStake;
$scope.straightTotalWin = totalWin;
};
$scope.riskAll = 0;
$scope.winAll = 0;
$scope.riskWinCalculations = function(slip, type) {
switch (type) {
case 'RISKSTRAIGHT':
applyStraightRisk(slip, slip.risk);
break;
case 'WINSTRAIGHT':
applyStraightWin(slip, slip.win);
break;
case 'RISKPARLAY':
applyParlayRisk($scope.currentParlay, $scope.riskParlay);
break;
}
sumStraightStakes($scope.betSlip);
};
那么你认为我的错误在哪里?
更新
在一个移动应用程序中,我正在执行完全相同的功能并且可以正常工作,看看
html
<button ng-click="openRiskWinKeypad(null, 'RISKPARLAY')">
Risk: {{riskParlay}}
</button>
<strong>Total Stake: </strong>{{riskParlay | currency}}
<strong>To Win: </strong>{{winParlay | currency}}
控制器
applyParlayRisk = function(parlay, amount) {
$scope.riskParlay = amount;
$scope.winParlay = amount * (parlay.payoutProportion || 4.5);}
这里有一点不同,因为我正在打开一个自定义键盘
$scope.openRiskWinKeypad = function(slip, type) {
$scope.keypad = {value: 0};
if (type === 'RISKSTRAIGHT' && slip.risk) {
$scope.keypad.value = slip.risk;
}
if (type === 'WINSTRAIGHT' && slip.win) {
$scope.keypad.value = slip.win;
}
$ionicPopup.show({
// here is where the keypad opens
}).then(function(amount) {
if (amount) {
switch (type) {
case 'RISKSTRAIGHT':
applyStraightRisk(slip, amount);
break;
case 'WINSTRAIGHT':
applyStraightWin(slip, amount);
break;
break;
case 'RISKPARLAY':
applyParlayRisk($scope.currentParlay, amount);
break;
}
}
sumStraightStakes($scope.betSlip);
});
};
编辑
如果我这样做
<input type="text" ng-model="riskParlay"
ng-change="riskWinCalculations(null, 'RISKPARLAY')">
和
applyParlayRisk = function(parlay, riskParlay) {
$scope.riskParlay = riskParlay;
console.log($scope.riskParlay);
$scope.winParlay = riskParlay * (parlay.payoutProportion || 4.5);
}
和
case 'RISKPARLAY':
applyParlayRisk($scope.currentParlay, riskParlay);
console.log($scope.currentParlay.name);
break;
我得到的只是
ReferenceError: riskParlay 未定义
【问题讨论】:
-
这些代码 sn-ps 甚至不一样。在第一个中,您将
$scope.riskParlay作为参数传递,在第二个中,您将传递一些其他值。applyParlayRisk($scope.currentParlay, $scope.riskParlay);,applyParlayRisk($scope.currentParlay, amount);第一个选项实际上没有意义,因为您似乎将$scope.riskParlay分配给自身,因为它是传入的参数。 -
@Claies 这就是我想要弄清楚的,这就是为什么问题是问题逻辑,因为我的代码有错误,否则我不会在这里。
-
applyParlayRisk函数是否在移动和桌面代码库之间共享? -
@Claies,不,是不同的功能,不同的控制器我有移动代码和网络代码。移动 sn-p 控制器有一个参数数量,即用户在我上面提到的自定义键盘中输入的数字/数量。在网络 sn-p 我有
riskParlay这应该是用户在输入中输入的值。 -
那么你为什么将
$scope.riskParlay作为参数riskParlay传递,然后在第一行通过$scope.RiskParlay = riskParlay将其分配给自己?我认为您正在破坏那里的财产。
标签: javascript angularjs angular-ngmodel