javascript - AngularJS $scope 在模板中无法访问

标签 javascript angularjs templates scope directive

正如标题总结得很好,我有一个模板,似乎无法访问我的 $scope。写一些更多的信息。该模板被渲染为来自另一个模板的指令,如下所示:

<site-overview class="site-overview float_left" ng-repeat="site in currentEngine.data.sites" site='site' provider='currentEngine' style="background-color: {{currentEngine.data.skin.skin_color_2}}">
  </site-overview>

这些“站点概述”模板是可见的,但是当我尝试访问添加到模板范围的变量站点时,我根本无法访问该变量,即使当我记录该变量时,我也得到了我的控制台中的数据,如下所示:

    (function(){
  'use strict';
  var singleSiteOverview = angular.module('stormforsStats.siteoverview',[]);

  singleSiteOverview.directive("siteOverview", [function(){
    return {
      restrict: "E",
      scope: {
        site:'=',
        provider: '='
      },
      templateUrl: "parts/pages/home/site-overview/site_overview.html",
      controller: 'siteOverviewCtrl',
      controllerAs: 'site'
    };
  }]);

  singleSiteOverview.controller('siteOverviewCtrl', ['$rootScope', '$scope', '$log', '$element', 'SERVER_DATA',
  function($rootScope, $scope, $log, $element, SERVER_DATA){
    $log.log($scope.site);
  }]);
})();

所以这个日志工作得很好,但是在模板中我无法访问$root:

    <a href="http://{{site.host_name}}" target="_blank" alt="site not available">
  <h4 class="skin_main_color">{{site.site_name}}</h4>
</a>

供您引用,我没有在此处包含所有代码,仅包含与问题相关的代码(据我所知)。

这不起作用。

最佳答案

正如评论之一所建议的,因为您使用的是“ Controller 作为”,所以您的隔离作用域变量绑定(bind)到作用域,而不是您的 Controller ,我猜这就是为什么您无法从您的 Controller 访问它的原因模板。

这里有一个与 github 上的问题类似的问题:https://github.com/angular/angular.js/issues/7635

关于javascript - AngularJS $scope 在模板中无法访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30046917/

相关文章:

javascript - jQuery:隐藏按钮直到选择最后一个下拉列表

javascript - 在 JS 对象数组中,我应该使用键来标识每个对象吗?

c++ - 为什么显式模板实例化的位置很重要

c++ - 从模板化父访问子 typedef

c++ - 模板二元运算符重载决议

javascript - 如何等待 $firebaseArray 数据

javascript - Python 打印与 Javascript console.log()

javascript - 如何限制移动网站的滚动但允许访问可能缩回的地址栏

javascript - AngularJS 动画卡片翻转

javascript - Angular 自定义验证指令 - 如何正确跳过 ng-disabled 字段?