2017-01-04 2 views
-1

здесь мы идем ... У меня есть контроллерКак отправить угловой параметр в событие onclick?

$scope.selectedScript = {}; 
    $scope.selectedScript.scriptId = null; 


    $scope.selectScript = function(script, index) { 
        $scope.selectedScript = script; 
        $scope.selectedRow = index; 

        myAppFactory.updateTextArea(script).success(
          function(data) { 
           $scope.selectedScript = data; 
          }); 
       }; 

    $scope.getSelectedClass = function(script) { 
        if ($scope.selectedScript.scriptId != undefined) { 
         if ($scope.selectedScript.scriptId == script.scriptId) { 
          return "selected"; 
         } 
        } 
        return ""; 
       }; 

У меня есть HTML-страницу

<label>Script ID:</label> 
<input name="scriptId" 
     type="text" 
     id="scriptId" 
     ng-model="selectedScript.scriptId" 
     ng-disabled="true" 
     value="{{selectedScript.scriptId}}" /> 

и теперь THx к IARKI у меня есть этот

<script type="text/javascript"> 
function goTo(){ 
var param1 = angular.element(document.querySelector('.scriptId')).scope.selectedScript.scriptId; 
location.href=this.href + '?scriptId='+param1; 
return false; 
} 
</script> 
<a href="http://localhost:8080/DSS-war/debug.html" target="_blank" onclick="goTo()">Debug</a> 

Я также список сценариев в таблице

<table class="scripts" name="tableScript" arrow-selector> 
      <tr bgcolor="lightgrey"> 
       <th>Script ID</th> 
       <th>File Name</th> 
      </tr> 
      <tr 
       ng-repeat="s in scripts | filter:searchField | orderBy:'scriptId'" 
       ng-click="selectScript(s, $index)" ng-class="getSelectedClass(s)"> 
       <td>{{s.scriptId }}</td> 
       <td>{{s.fileName }}</td> 
      </tr> 
     </table> 

Тогда я нажмите на ссылку выше, и появляется новая вкладка, но ссылка все еще

http://localhost:8080/DSS-war/debug.html 

, но мне нужно, чтобы открыть в новой вкладке, а также быть таким:

http://localhost:8080/DSS-war/debug.html?scriptId=1 
http://localhost:8080/DSS-war/debug.html?scriptId=2 
http://localhost:8080/DSS-war/debug.html?scriptId=12 

и так далее ... с номерами

любая идея?

И это должно быть функцией OnClick, а не нг нажмите Я знаю, как это работает на нг-клик, но мне нужно, чтобы заставить его работать на OnClick ...

и теперь я получаю это из хромированного отладчика:

Uncaught TypeError: Cannot read property 'scriptId' of undefined 

в линии

var param1 = angular.element(document.querySelector('.scriptId')).scope.selectedScript.scriptId; 
+0

Является 'param1' в глобальном масштабе? Почему вы не можете указать 'href'using angularjs? – Satpal

+2

* «должен быть onclick» * .... почему? Уродливый способ делать вещи – charlietfl

+0

Я не знаю, является ли param1 глобальной областью, как я должен ее проверить? и я должен заставить его работать без угловой части, ее требуется по спецификациям – newb

ответ

-1

Вы можете попытаться получить доступ углового объема с помощью чистого JavaScript

<script type="text/javascript"> 
    function goTo(){ 
    var param1 = angular.element("#scriptId").scope().selectedScript.scriptId; 
    location.href=this.href + '?scriptId='+param1; 
    return false; 
    } 
</script> 
<a href="http://localhost:8080/DSS-war/debug.html" target="_blank" onclick="goTo()">Debug</a> 

Update Бесполезный код, но я надеюсь, что это поможет вам

<!doctype html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title>My application</title> 
</head> 
<body ng-app="myApp" ng-controller="myCtrl"> 
<label>Script ID:</label> 
<input name="scriptId" type="text" id="scriptId" ng-model="selectedScript.scriptId" ng-disabled="true"> 
<button onclick="generateID()">Set code</button> 
<a href="#" onclick="goTo()">Debug</a> 
</body> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.1/angular.min.js"></script> 
<script type="text/javascript"> 
    function generateID() { 
     var code = Math.floor(Math.random() * 20) + 1; 
     document.getElementById('scriptId').setAttribute('value', code.toString()); 
    } 
    function goTo() { 
     var scope = angular.element(document.querySelector('#scriptId')).scope(); 
     scope.$apply(function() { 
      scope.selectedScript.scriptId = document.querySelector('#scriptId').getAttribute('value'); 
     }); 
     scope.changeURl(); 
    } 
    angular.module('myApp', []) 
     .controller('myCtrl', function ($scope, $window) { 
      $scope.selectedScript = {}; 
      console.log('We are in controller'); 
      $scope.changeURl = function() { 
       $window.open('http://localhost:8080/DSS-war/debug.html?scriptId=' + $scope.selectedScript.scriptId, '_blank'); 
      } 
     }); 
</script> 
</html> 
+0

он открывает новую вкладку, но та же проблема со ссылкой http: // localhost: 8080 /DSS-war/debug.html – newb

+0

, но thx u решил мою новую задачу табуляции – newb

+0

Я получаю эту ошибку, как только я использую код выше: Неиспользуемая ошибка: [jqLite: nosel] Поиск элементов с помощью селекторов не поддерживается jqLite! См. Http://docs.angularjs.org/api/angular.element http://errors.angularjs.org/1.3.20/jqLite/nosel at angular.js: 63 at Object.JQLite [как элемент ] (angular.js: 2531) at goTo (index2.html: 176) at HTMLAnchorElement.onclick (index2.html: 181) – newb

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