无法从$scope获取值
Unable to get value from $scope
包含应用程序模块
-
应用.js
var appProfileDetails = angular.module('profileDetailsApp', [ 'ngMaterial','ngAria','ngAnimate','ngRoute']);
它有控制器文件
-
联系人控制器.js
appProfileDetails.controller('contactController', function($scope) { $scope.msg= function() { alert($scope.emailId); }; });
-
网页条(联系方式.jsp)
<div ng-app="profileDetailsApp"> <div style="float: left;margin-left: 50px;width: 45%;" ng-controller="contactController" > <div ng-include="'/mm/resources/html/ContactDetails2.html'"> </div> </div>
此文件包含在上面的文章中
-
联系方式2.html
<div> <input type="email" ng-model="emailId"/> <input type="button" ng-click="msg()"/> </div>
它不起作用的原因是 ng-include 创建了一个新的子作用域,从而破坏了原型作用域继承。
为了更好地理解这个问题,必须阅读:
- Angularjs ng-model 在 ng-if 中不起作用。
- AngularJS中范围原型/原型遗传的细微差别是什么?
作为一个好的经验法则,始终使用控制器作为语法。这就是您应该使用它的原因。
尝试使用 controllerAs 语法。 ng-controller="contactController as contact"
然后在联系人详细信息2模板中执行ng-model="contact.emailId"
(并将ng-click
值更改为contact.msg()
。
如果您在联系人控制器中将电子邮件 ID 实例化为",它也将起作用。 $scope.emailId = ''
.
让我用简单的术语解释一下这里发生的事情。
角度范围的问题在于它使用原型继承。Angular 将从上到下创建范围。
因此,它将首先创建控制器并为其创建一个新范围。然后它遇到了 ng-include,可悲的是,它创建了一个新的继承范围。
这意味着它是一个新的范围对象,但原型(也称为父对象)设置为父范围。每当 angular 在 ng-include 的新作用域中查找某些内容时,它都会检查它是否存在于我的本地作用域,如果不存在,它是否存在于父作用域,依此类推,直到它到达$rootScope。
问题是ng-model检查本地范围内是否存在emailId。它在本地范围内找不到它。它查找父范围,但在那里也找不到它。因此,它将在本地创建它。这就是父范围没有电子邮件 ID 的原因。
因此,要么保证它已经存在于控制器上(因为 ng-model 将立即在正确的变量上工作),要么使用控制器来解决问题。绝对推荐使用 controllerAs 语法,因为它可以避免所有类似的问题,而无需考虑它。
为什么 controllerAs 有效?因为当它为控制器创建作用域时,它会在具有属性的新作用域上执行此操作。在我的建议中,它将创建"联系"。现在,当ng-model在ng-include中运行时,它会检查"我有联系吗?"不。但我的父母有。家长的联系人是否有电子邮件 ID?不,好的。让我在那里创建它并在我的父作用域上操作它。
如果你想避免角度 1 的问题,一定要了解范围是如何工作的。我建议遵循像约翰爸爸的指南这样的风格指南。它还解释了为什么您应该遵循这些规则。
- 正在获取Angular以检测$scope中的更改
- 获取Div Width,然后更新Scope Variable
- 如何使用get()获取嵌套的Scope属性
- 从Angular Scope中的Array中获取所有对象
- 在 angularjs $scope中获取数据,同时从 django 获取数据
- 如何在回调函数中获取 AngularJS 中 $scope 变量的当前状态
- AngularJS:当我已经声明$scope时,获取$scope不是定义的错误
- AngularJS:$scope.$watch 不会更新从自定义指令$resource获取的值
- 钻取$scope以获取复杂的自动完成DOM中的特定元素
- 无法从$scope获取值
- 从 JSON 获取数据并将此元素添加到变量$scope
- 获取 $scope/ngcontroller 中的元素
- 如何从控制器功能内部获取$scope
- 如何使用 angularjs 从这个$scope中获取值
- 获取$rootScope事件处理程序的$scope引用
- 从AngularJS中的服务获取数据后,如何更新$scope是最好的方法
- 在PageMod Firefox中获取Angular Scope
- 使用angular js中的另一个变量来获取$scope.x1变量
- 如何使用angularjs在函数中获取$scope值
- 在angularjs中获取$scope对象所有真值长度的最佳方法是什么