2

Пример Ссылка: Example

Привет всем,

Я создал одну Глобальную кнопку Help в индексном файле на основе URL я загрузке динамической справки (HTML-файл), который работает отлично. Мне нужно определить, какой контроллер активирован, и мне нужно передать текущую $ scope в качестве параметра в $ scope.HelpFunction function. $ Scope.HelpFunction доступен в директиве справки. В директиве мне нужно получить текущий $ scope.message от текущего контроллера. основанный на $ объема мне нужно реализовать несколько логики любой один помочь мне в этом .....

.directive("help", function($location, $window){ 
    .directive("help", function($location, $window){ 
    return { 
     restrict: "A", 
     template: "<button ng-click=\"HelpFunction()\">Help</button>", 
     scope: true, 
     controller: function($scope){ 
      $scope.HelpFunction = function(){ 
      //Here I need to access current $scope value 
      alert($scope.message) 
       //var url =$location.url(); 
       //$window.open(url+ '.html', '', 'width=700,height=700'); 
      } 
     }, 
     link: function(scope){ 

     } 
    } 
    }) 
.controller('HomeController', function ($scope, router, $location) { 
     $scope.message = "Home"; 
     $scope.TestFunction = function(data) { 
     console.log("Home:" + $location.url()) 
    }; 

}) 
.controller('MainController', function ($scope, router) { 
     $scope.message = "Main"; 
     $scope.TestFunction = function(data) { 
     console.log("Main:" + data) 
    }; 

}) 
.controller('Page1Controller', function ($scope, router) { 
    $scope.message = "Page1"; 
    $scope.TestFunction = function(data) { 
     console.log("Page2:" + data) 
    }; 

}) 
+0

Я пробовал такой же результат. можете ли вы поделиться кодированием? –

+0

Что вы подразумеваете под «активацией» контроллера? –

ответ

-1

Чтобы решить эту проблему, вы можете использовать service. service будет делиться данными между controllers.

Показательный пример на plunker.

Создать service.

.service('HelpService',function(){ 
return { 
    message:"" 
} 
}) 

directive.

.directive("help", function($location, $window) { 
return { 
    restrict: "A", 
    template: "<button ng-click=\"HelpFunction()\">Help</button>", 
    scope: true, 
    controller: function($scope,HelpService) { 
    console.log($scope) 
    $scope.HelpFunction = function() { 
     //Here I need to access current $scope value 
     alert(HelpService.message) 
     //var url =$location.url(); 
     //$window.open(url+ '.html', '', 'width=700,height=700'); 
    } 
    }, 
    link: function(scope) { 

    } 
} 
}) 

controller.

.controller('HomeController', function($scope, router, $location,HelpService) { 
HelpService.message = "Home"; 
console.log(HelpService.message) 
$scope.TestFunction = function(data) { 
    console.log("Home:" + $location.url()) 
}; 
}) 
+1

Это больше похоже на работу, чем на реальное решение, извините – Nevershowmyface

+0

Это не работает. Это решение - ** угловой ** способ. «Службы» существуют для распространения данных ** между ** 'контроллерами'. SO - вот такой вопрос - как делиться данными между разными «контроллерами». –

0

Добавить scope: true в массив returnig как этот

module.directive("help", function($location, $window){ 
    return { 
    restrict: "A", 
    scope: true, // Get the scope of the current Controller 
    template: "<button style=\"background-color: #f4f4f4; color: black;\" ng-click=\"HelpFunction(\'section2\')\" my-target>Help</button>", 
    controller: function($scope) { 
     $scope.HelpFunction = function(id) { 
     var url = $location.url(); 
     $window.open(url+ '.html', '', 'width=700,height=700'); 
     } 
    } 
    } 
}) 

Обновлено:

Внешний пример http://jsfiddle.net/5gWjY/671/

ОБНОВЛЕНИЕ 2 (в соответствии с просьбой):

Внешний пример http://jsfiddle.net/5gWjY/673/

+0

Можете ли вы поделиться исполняемым примером @Nevershowmyface –

+0

внутри $ scope.HelpFunction Мне нужно получить доступ к текущей $ scope –

+0

'$ scope.HelpFunction = function (id) {$ scope; } '? – Nevershowmyface

0

Создайте завод с одноточечным устройством и сохраните ссылку на свою текущую область действия в нем на каждом контроллере.

factory('currentScope', function(){ 
    var currentScope = {}; 

    return currentScope; 
}) 

controller('HomeController', function($scope, currentScope) { 
    currentScope = $scope; 
}) 

controller('MainController', function($scope, currentScope) { 
    currentScope = $scope; 
}) 

Доступ к текущей области действия внутри вашей директивы.

.directive("help", function($location, $window, currentScope){ 
    return { 
     restrict: "A", 
     template: "<button ng-click=\"HelpFunction()\">Help</button>", 
     scope: true, 
     controller: function($scope){ 
      $scope.HelpFunction = function(){ 
      //Here I need to access current $scope value 
      console.log(currentScope); 

      alert($scope.message) 
       //var url =$location.url(); 
       //$window.open(url+ '.html', '', 'width=700,height=700'); 
      } 
     }, 
     link: function(scope){ 

     } 
    } 
    }) 

Вам необходимо назначить контроллер для вашего вида.

$stateProvider.state('Home', { 
       url: '/home', 
       templateUrl: 'Home.html', 
       controller: 'HomeController' 
      }); 
+0

Всегда возвращайте объект {} только @Charlie H –

+0

Правильно выполните это решение. Тогда он не вернется {}. –

+0

Я реализовал то же самое, что ур упомянул @charlie H –

Смежные вопросы