$scope 未绑定 Angular JS 中的内部函数

$scope not binding inside function in Angular JS

我正在使用 ionic 框架并尝试向服务发出请求,但我无法将参数传递给函数。

我的Html(离子结构)如下:

<ion-view view-title="Service Factor" ng-controller="beamdeflectionCtrl">
     <ion-content>
         <div class="item">
             <form novalidate class="col-lg-2">
                 <div class="list">
                     <label class="item item-input item-stacked-label">
                         <span class="input-label">Shaft Length</span>
                         <input type="number" name="itsShaftLength" placeholder="1212" ng-model="itsShaftLength">
                     </label>
                     <label class="item item-input item-stacked-label">
                         <span class="input-label">Running Load</span>
                         <input type="number" placeholder="1212" ng-model="itsRunningLoad">
                     </label>
                     <label class="item item-input item-stacked-label">
                         <span class="input-label">Area Moment Of Inertia</span>
                         <input type="number" placeholder="1212"
                                   ng-model="itsAreaMomentOfInertia">
                     </label>
                     <label class="item item-input item-stacked-label">
                         <span class="input-label">Modulus Of Elasticity</span>
                         <input type="number" placeholder="1212"
                                   ng-model="itsModulusOfElasticity">
                     </label>
                 </div>
                 <div class="form-group">
                     <button class="btn btn-success btn-lg" ng-click="post()">Get Beam Defection</button>
                 </div>
             </form>
         </div>
     </ion-content>
 </ion-view>

还有我的 JS 文件:

angular.module('beamdeflection', [])
    .controller('beamdeflectionCtrl', beamdeflectionCtrl,['$scope']);

function beamdeflectionCtrl($stateParams, $scope, $http, $ionicPopup) {
    $scope.post = function () {
        $http({
            url: "/myurl",
            method: "GET",
            params: {
                shaftLength: $scope.itsShaftLength,//I am not getting this value
                runningLoad:$scope.itsRunningLoad,//I am not getting this value
                areaMomentOfInertia: $scope.itsAreaMomentOfInertia,//I am not getting this value
                modulusOfElasticity:$scope.itsModulusOfElasticity//I am not getting this value
            }}).success(function (data, status, headers, config) {
                $ionicPopup.alert({
                    title: 'Beam Deflection Calculated',
                    template: data
                });
                $scope.data = data;
            }).error(function (data, status, headers, config) {
                $ionicPopup.alert({
                    title: 'Beam Deflection Failed',
                    template: data
                });
            });
        };
    };
}

由于某些原因 $scope.itsShaftLength 和 post 函数中的其他参数没有获取值。调试器声明它们未定义。我是 angular 的新手。我想知道我是否遗漏了代码中的某些内容。此外,我尝试将 $scope 作为 $scope.post = function ($scope){.... 传递给函数,但它对我大喊大叫说“$scope not defined”。感谢任何帮助。

如我的评论所述,您应该始终在 ng-model 中使用对象,因为基元的绑定在子作用域中被破坏。

一般经验法则:在 ng-model 中总是有一个点

尝试将所有 ng-model 更改为具有对象前缀和点

<input ng-model="formData.itsModulusOfElasticity">

在控制器中定义对象:

$scope.formData={};

这也简化了您需要作为参数发送的内容,因为所有表单数据都已包含在一个对象中:

 params: angular.copy($scope.formData) // using "copy" strips out any angular properties

从这里开始进一步阅读,并确保阅读有关 angular 范围的内容

Why don't the AngularJS docs use a dot in the model directive?

您确实没有在代码的 $scope 中定义您的 ng-models。你可以这样做:

 $scope.post = function (data) {
    $http({
        url: "/myurl",
        method: "GET",
        params: {
            shaftLength: data.itsShaftLength,
            runningLoad: data.itsRunningLoad,
            areaMomentOfInertia: data.itsAreaMomentOfInertia,
            modulusOfElasticity: data.itsModulusOfElasticity            }})... more code...

在您的 html 中,您在所有输入中定义了 ng-model:

<input type="number" name="itsShaftLength" placeholder="1212" ng-model="data.itsShaftLength"> ... 

在 ng-click 上:

ng-click="post(data)"