【问题标题】:$scope returns undefined in ionic app$scope 在离子应用程序中返回未定义
【发布时间】:2017-06-15 11:44:08
【问题描述】:

我想知道 $scope 的双重行为。在下面的脚本中,我将name 的值作为警报。但在我的 ionic 应用程序中,相同的代码会提醒 undefined

我用谷歌搜索了这个问题,发现this link 是一个解决方案,它指出我们需要使用 dot(.) 来获取ng-model 中的值。两者有什么区别。

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
    $scope.a =function a(){alert($scope.name);}
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="myCtrl">
Name: <input ng-model="name" ng-blur="a()">
</div>

【问题讨论】:

  • 尝试使用 $scope.a = function(val){alert(val);} 和

标签: javascript angularjs cordova ionic-framework


【解决方案1】:

尝试如下更改控制器功能:

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
    $scope.a =function(){
        alert($scope.name);
    }
});

【讨论】:

  • 不,现在是 $scope.a =function a(){alert($scope.name);} ('function a')
【解决方案2】:

实际上它确实适用于 Ionic,

angular.module('starter.controllers', [])
.controller('myCtrl', function($scope) {
  $scope.a = function a() {
    alert($scope.name);
  }

})

DEMO

【讨论】:

  • 我在我的模块中使用starter.controllers
  • 我不明白你在说什么
  • 在您的回答中,您要求我使用“starter.controllers”而不是“myApp”,这正是我正在做的事情
  • @sam 其实没关系,我已经改变了,但它仍然可以工作plnkr.co/edit/4OFDOQ8frnKczNKAHsZZ?p=preview
  • @RameshRajendran 除非控制器被重新实例化,否则不应该有任何错误
【解决方案3】:

解决办法:

“如果你使用 ng-model,你必须有一个点。”
让你的模型指向一个 object.property,然后你就可以开始了。

控制器

$scope.formData = {};
$scope.check = function () {
  console.log($scope.formData.searchText.$modelValue); //works
}

模板

<input ng-model="formData.searchText"/>
<button ng-click="check()">Check!</button>

当子作用域在起作用时会发生这种情况 - 例如子路由或 ng-repeats。 子作用域创建了它自己的值并产生了名称冲突as illustrated here

请参阅此视频剪辑以获取更多信息:https://www.youtube.com/watch?v=SBwoFkRjZvE&t=3m15s .

这是从下面的链接中提到的:

其他解决方案

使用this关键字代替$scopeMore details



您还可以从以下两个讨论中获得更多详细信息

Ng-model does not update controller value

Why is my ng-model variable undefined in controller?


更新方案一:

请先在控制器顶部声明空白对象:

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
    $scope.name = "";
    $scope.a = function(){alert($scope.name);}
});

希望这些对你有帮助。

【讨论】:

  • 但是在上面的 sn-p 中你可以看到我没有在 ng-model 中使用 'dot' 但它仍然给出了正确的输出
  • 我认为这可能是$parent$childmanipulation 的问题。如果我的所有解决方案都不适合您,请告诉我
【解决方案4】:

尝试使用 json 对象。

  var app = angular.module('myApp', []);
    app.controller('myCtrl', function($scope) {
        $scope.user = {'name':''};
        $scope.a =function a(){alert($scope.user.name);}
    });

 <div ng-app="myApp" ng-controller="myCtrl">
Name: <input ng-model="user.name" ng-blur="a()">
</div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-14
    • 2018-01-26
    • 2017-08-21
    • 1970-01-01
    • 2020-04-23
    • 2018-03-01
    • 1970-01-01
    • 2020-10-01
    相关资源
    最近更新 更多