AngularJS 中无法访问 ng-model 外部的变量
Unable to access variable outside ng-model in AngularJS
我今天才开始玩 angularJS,我有点困惑为什么我只能在我的代码的某个区域访问我的变量。在选择框下方的区域中,它从数组中选择一个文件,变量 {{ fileInfo }} 显示正常并且我的控制台日志显示该值在那里,但是该值不显示在第二个面板中 - 谁能解释我在哪里我出错了,为什么它没有出现以及如何解决它!这是我创建的 HTML,感谢您的宝贵时间。
<div class="col-md-6">
<div class="panel panel-default" ng-controller="FileInfo">
<div class="panel-heading">
<h3 class="panel-title">Files</h3>
</div>
<form class="form-inline padding-left">
<select class="form-control padding-left" name="selectedFile" ng-model="fileSelection" ng-change="FileInfo()" ng-options="opt.filename as opt.basename for opt in files">
</select>
{{ fileInfo }}
</form>
</div>
</div>
<div class="col-md-6">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">File Info</h3>
<br> {{ fileInfo }}
</div>
您有 2 个 实例 FileInfo
控制器。控制器不会因为您在 HTML 中声明了两次而被共享。每个控制器实例都有自己的范围。
这样有两个控制器是自找麻烦。您最好使用所谓的控制器作为语法。这样 angular 就知道您要绑定到哪个控制器。像这样:
<div class="col-md-6">
<div class="panel panel-default" ng-controller="FileInfo as ctrl1">
<div class="panel-heading">
<h3 class="panel-title">Files</h3>
</div>
<form class="form-inline padding-left">
<select class="form-control padding-left" name="selectedFile" ng-model="ctrl1.fileSelection" ng-change="ctrl1.FileInfo()" ng-options="opt.filename as opt.basename for opt in ctrl1.files">
</select>
{{ ctrl1.fileInfo }}
</form>
</div>
</div>
<div class="col-md-6">
<div class="panel panel-default" ng-controller="FileInfo as ctrl2">
<div class="panel-heading">
<h3 class="panel-title">File Info</h3><br>
{{ ctrl2.fileInfo }}
</div>
请注意,如果您使用此策略,那么在您的控制器上您将不再在 $scope 对象上设置变量,而是在 this[=17 上设置变量=] 所以你只需做 this.fileInfo
而不是 $scope.fileInfo
从你的问题看来,你想显示{{fileInfo}}
两次。
我会在你的 div
周围创建一个容器 div
,然后将 ng-controller
放在容器 div
上。
<div class="container" ng-controller="controller1>
<div class="col-md-6"> <!-- Stuff --> {{fileInfo}} </div>
<div class="col-md-6"> <!-- Stuff --> {{fileInfo}} </div>
</div>
编辑后您设置了一次控制器 - 这很好。但是控制器仅在声明它的 <element>
内工作。您的第二个 {{fileInfo}}
在 <div ng-controller="FileInfo">
元素之外。您必须在包含 {{fileInfo}}
.
的 <div>
元素中声明 ng-controller
<div ng-controller="FileInfo">
<div>
<div>
{{fileInfo}}
</div>
</div>
<div>
{{fileInfo}}
</div>
</div>
更重要的是,这 2 个实例具有不同的范围。
<div ng-controller="FileInfo">
first scope:
{{value}}
</div>
<div ng-controller="FileInfo">
second scope:
{{value}}
</div>
一个快速的 plunker 表明 ng-controller 创建了单独的范围。
https://plnkr.co/edit/BUuTPP3qTW9HE0jxI1C6?p=preview
我今天才开始玩 angularJS,我有点困惑为什么我只能在我的代码的某个区域访问我的变量。在选择框下方的区域中,它从数组中选择一个文件,变量 {{ fileInfo }} 显示正常并且我的控制台日志显示该值在那里,但是该值不显示在第二个面板中 - 谁能解释我在哪里我出错了,为什么它没有出现以及如何解决它!这是我创建的 HTML,感谢您的宝贵时间。
<div class="col-md-6">
<div class="panel panel-default" ng-controller="FileInfo">
<div class="panel-heading">
<h3 class="panel-title">Files</h3>
</div>
<form class="form-inline padding-left">
<select class="form-control padding-left" name="selectedFile" ng-model="fileSelection" ng-change="FileInfo()" ng-options="opt.filename as opt.basename for opt in files">
</select>
{{ fileInfo }}
</form>
</div>
</div>
<div class="col-md-6">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">File Info</h3>
<br> {{ fileInfo }}
</div>
您有 2 个 实例 FileInfo
控制器。控制器不会因为您在 HTML 中声明了两次而被共享。每个控制器实例都有自己的范围。
这样有两个控制器是自找麻烦。您最好使用所谓的控制器作为语法。这样 angular 就知道您要绑定到哪个控制器。像这样:
<div class="col-md-6">
<div class="panel panel-default" ng-controller="FileInfo as ctrl1">
<div class="panel-heading">
<h3 class="panel-title">Files</h3>
</div>
<form class="form-inline padding-left">
<select class="form-control padding-left" name="selectedFile" ng-model="ctrl1.fileSelection" ng-change="ctrl1.FileInfo()" ng-options="opt.filename as opt.basename for opt in ctrl1.files">
</select>
{{ ctrl1.fileInfo }}
</form>
</div>
</div>
<div class="col-md-6">
<div class="panel panel-default" ng-controller="FileInfo as ctrl2">
<div class="panel-heading">
<h3 class="panel-title">File Info</h3><br>
{{ ctrl2.fileInfo }}
</div>
请注意,如果您使用此策略,那么在您的控制器上您将不再在 $scope 对象上设置变量,而是在 this[=17 上设置变量=] 所以你只需做 this.fileInfo
而不是 $scope.fileInfo从你的问题看来,你想显示{{fileInfo}}
两次。
我会在你的 div
周围创建一个容器 div
,然后将 ng-controller
放在容器 div
上。
<div class="container" ng-controller="controller1>
<div class="col-md-6"> <!-- Stuff --> {{fileInfo}} </div>
<div class="col-md-6"> <!-- Stuff --> {{fileInfo}} </div>
</div>
编辑后您设置了一次控制器 - 这很好。但是控制器仅在声明它的 <element>
内工作。您的第二个 {{fileInfo}}
在 <div ng-controller="FileInfo">
元素之外。您必须在包含 {{fileInfo}}
.
<div>
元素中声明 ng-controller
<div ng-controller="FileInfo">
<div>
<div>
{{fileInfo}}
</div>
</div>
<div>
{{fileInfo}}
</div>
</div>
更重要的是,这 2 个实例具有不同的范围。
<div ng-controller="FileInfo">
first scope:
{{value}}
</div>
<div ng-controller="FileInfo">
second scope:
{{value}}
</div>
一个快速的 plunker 表明 ng-controller 创建了单独的范围。 https://plnkr.co/edit/BUuTPP3qTW9HE0jxI1C6?p=preview