javascript - 指定要在特定页面上使用的指令的 Controller

标签 javascript html angularjs angularjs-directive

我的问题是为每页(或需要的地方)指定一个 Controller 是否是“允许的”,这不是一个好主意,或者是否有更好的方法?

示例:ng-controller="SocialMentionsAnalysisController" 添加到我的 og-social-mentions-social-media-nav 指令中,以利用该 Controller 的功能。见下文:

<og-social-mentions-social-media-nav ng-controller="SocialMentionsAnalysisController"></og-social-mentions-social-media-nav>

原因是我一直在努力创建一个不会重新加载页面的 anchor 滚动菜单。

当我遇到以下方法时,我尝试了很多不同的可能解决方案:

<强>1。在我的 Controller 中添加此方法:

  $scope.redirectTodiv = function(divname,event) {
     var id = $location.hash();
      $location.hash(divname);
      $anchorScroll();
      $location.hash(id);

   };

<强>2。像这样创建我的菜单链接:

<li><a href ng-click="redirectTodiv('top', $event)"><img title="Post List" src="images/postList.svg" title="" height="25" /><span class="navText">Summary</span></a></li>
<li><a href ng-click="redirectTodiv('mentionList', $event)"><img title="Mentions List" src="images/postList.svg" title="" height="25" /><span class="navText">Mentions List</span></a></li>

<强>3。当然,还要在我的 Controller 中注入(inject) $location$anchorScroll

这很好用,但我很难使用我的导航指令来完成这项工作,直到我按照上面的说明在指令中指定了 Controller 。

那么,这样可以吗?

EDIT: My Controller has minimal functionality. Here is my Controller code:

angular.module('portalDashboardApp')
  .directive('ogSocialMentionsSocialMediaNav',['MenuState', function(MenuState) {
    return {
      restrict: 'E',
      replace: true,
      templateUrl: './socialMedia.module/socialMedia.templates/SocialMentionsSocialMediaNavTemplate.html',
      link: function(scope) {
        scope.getClass = MenuState.getClass;
      }
    };
}]);

最佳答案

您可以尝试使用ui-router来解决这个问题。

例如,您有一个指令菜单:

myApp.directive('menu', function() {
    return {
        restrict: 'E',
        template: '<nav class="nav">'+
'  <ul>'+
'    <li><a ui-sref="summary">Summary</a></li>'+
'    <li> <a ui-sref="mentions">Mentions</a></li>'+
'  </ul>'+
'</nav>',
        replace: true,
        link: function(scope, elm, attrs) {
            console.log("Run Menu");                       
        }
    };
});

在根应用程序中添加常规配置:

angular.module("myApp", ["ui.router", "AppCtrls1", "AppCtrls2"]);
    myApp.config(function($stateProvider, $urlRouterProvider) {
        $stateProvider.state('root', {
            abstract: true,
            views: {
                "header@": {},
                "main@": {},
                "footer@": {}
            }
        });
     });

最后在应用程序的 html 中:

<menu></menu> 
<div ui-view="main"></div>

现在您可以创建两个应用程序:

第一个应用程序在同一个应用程序中有一个 subview summary-level-2,您也可以将其他应用程序注入(inject)到 subview 中。

/** APP ONE **/
var subApp1 = angular.module("AppCtrls1", []);

subApp1.config(function($stateProvider, $urlRouterProvider) {
  $stateProvider
  .state("summary", {
    parent:'root',
    views:{
       "main@":{
          controller: "Ctrl1",
              template: '<section class="red"><p>Summary</p> <div ui-view></div></section>'
       }
    },
    url: "/summary"
  })
  .state("summary-level-2", {
    parent:'summary',
    controller: "Ctrl2",
    template: '<p class="green">summary-level-2</p>',
    url: "/summary-level-2"
  });
});


subApp1.controller("Ctrl1", function($scope) {
  console.log("Ctrl1 loaded.");
});

subApp1.controller("Ctrl2", function($scope) {
  console.log("Ctrl2 loaded. level 2");
});


/** APP two **/
    var subApp2 = angular.module("AppCtrls2", []);
    subApp2.config(function($stateProvider, $urlRouterProvider) {
      $stateProvider
      .state("mentions", {
        parent:'root',
        views:{
           "main@":{
              controller: "Ctrl1",
                  template: "<p>Mentions</p>"
           }
        },
        url: "/mentions"
      });
    });

    subApp2.controller("Ctrl1", function($scope) {
      console.log("Ctrl1 loaded.");
    });

您可以在 Jsfiddle 中看到一个实例。 .

关于javascript - 指定要在特定页面上使用的指令的 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41142343/

相关文章:

javascript - 将 Javascript 输入值传递到 PHP 文件以发布到 SQlite

JavaScript 为 html 字符串中的所有元素 trim innerHtml 中的空格

html - 垂直居中的元素符号图像

javascript - 为什么动画不会出现在模态/灯箱中?

html - 什么是居中相对形式的最佳方式,内部 float 的输入内容包含图像

javascript - HTML5 游戏的对象存储 - 使用什么?

javascript - 我可以在 Angular 中使用全局常量而不注入(inject) Controller 吗?

javascript - 刷新后,angularjs firebase登录范围值不可用

javascript - ng-选择第一个不隐藏的

javascript - 从 Cypress 的前五个 google 搜索结果中关注我的网站链接