【问题标题】:cannot access scope in views - Angular无法访问视图中的范围 - Angular
【发布时间】:2016-02-04 00:19:00
【问题描述】:

由于某种原因,我无法从视图中的控制器范围变量中检索数据。我所有的视图都使用同一个控制器,所以我不确定出了什么问题。任何帮助将不胜感激。

这是我的 App.js

    var app = angular.module('app', [
    'ngRoute'
    ]);


// Route configurations
app.config(['$routeProvider', function ($routeProvider){
$routeProvider.when('/', {
templateUrl: 'partials/home.html',
controller: 'MainController'
})
.when('/countries', {
templateUrl: 'partials/countriesList.html',
controller: 'MainController'
})
.when('/details', {
templateUrl: 'partials/countryDetails.html',
controller: 'MainController'
})
.otherwise({
 redirectTo: '/'
 });
}]);



// Main Controller Setup
app.controller('MainController', ['$scope', MainController]);
function MainController ($scope){
$scope.hello = 'hello';
}

这是我试图访问范围的视图之一:

<h1>Country List</h1>
<a href="#details"><button class="btn">Countries Details</button></a>

<p>hello: {{hello}}</p>

这是我的 index.html

<!DOCTYPE html>
<html ng-app="app">
 <head>
  <title>Countries and Capitals</title>
  <link rel="stylesheet" type="text/css" href="css/vendor/bootstrap.min.css">
  <link rel="stylesheet" type="text/css" href="css/main.css">
 </head>
 <body ng-controller="MainController" ng-cloak>
  <div class="container">
    <div class="row">
      <div class="col-sm-12 text-center">
        <ng-view></ng-view>
      </div>
     </div>
   </div>


  <script src="js/vendors.js"></script>
  <script src="js/scripts.js"></script>
 </body>
</html>

【问题讨论】:

  • 我没有收到错误消息,我也无法从控制器控制台记录范围变量。
  • 只是一个疯狂的猜测。你在加载app.js 吗?
  • 是的,我必须这样做,因为路由工作完美。我只是无法访问范围变量。

标签: javascript angularjs angularjs-scope ngroute


【解决方案1】:

嵌套范围造成的问题。使用一些嵌套范围的更好方法是使用 controllerAs 方法。你可以试试:

```

<body ng-controller="MainController as myctrl" ng-cloak>

<p>hello: {{myctrl.hello}}</p>  

```

【讨论】:

  • 运气不好 =(。我正在尝试在其中一个视图中访问 hello 变量。不是直接在索引中
  • 哦,我明白了。您在 body 标签中使用 ng-controller。这是不必要的,因为您的控制器通过路由绑定。尝试删除它。
  • 不走运,我应该尝试使用 rootscope 还是类似的东西?
  • 不不,让我为您的案例做一个 jsfiddle 示例。
  • jsfiddle.net/5v9ztqwc 在这里。看看好不好给我回复。
【解决方案2】:

在 ng-route 添加控制器时,您所做的是创建同一控制器的另一个作用域。我的建议是你要么不使用控制器,即删除控制器属性或添加 $parent。在您引用的视图中。

如果您希望在一组页面上具有相同的范围,则首选第一个,如果您对不同的页面使用不同的控制器,则首选第二个。

此外,如果您想访问全局变量,您可以将它们添加到 $rootScope 并全局访问它们。..

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多