Проверка URL. $ Valid (если затем) внутри AngularJS ng-click.Как? - PullRequest
0 голосов
/ 04 октября 2018

Я делаю список URL-адресов внутри углового приложения. Большинство URL-адресов ведут к https://example.io ... Однако некоторые из них имеют такие URL-адреса, как https://example.io.Я не хочу указывать URL-адрес внутри каждого объекта ... Я просто хочу проверить URL-адрес, а затем либо открыть веб-сайт с помощью http:// или https:// в зависимости от того, что действительно.

Я используюng-click и привязка его к открытому окну с URL вдоль вложенного изображения.

Index.html

    <head>
    <script src="js/shared/angular.min.js"></script>
    <link rel="stylesheet" href="css/row.css">
    </head>

    <body ng-app="MainApp">
      <div ng-controller="Main" ng-cloak>
        <div id="RowDiv">
          <button style="visibility: hidden; width: 25px;"></button>
          <a ng-repeat="r1 in r1s" ng-click="openurl(r1.url.$valid==true?r1.url:'https://' + r1.name + '.io')"  ng-cloak>
            <img ng-src="img/{{r1.name}}.png" height="40px">
            </a>
            <button style="visibility: hidden; width: 25px;"></button>
        </div>
    </div>

    <button id="LftBtn" style="z-index: 1000;" >
        <i id="L-Arrow"></i>
    </button>

    <button id="RgtBtn" style="z-index: 1000;" >
        <i id="R-Arrow"></i>
    </button>

    <script src="js/protractor.js"></script>
    <script src="js/row.js"></script>
    </body>

protractor.js

    var app = angular.module("MainApp", []);

    // - - app controllers - - \\

    app.controller('Main', ['$scope', function($scope) {
      $scope.r1s = [
        {name: 'Surviv', url: 'https://google.com'},
        //Just a test, urls will be changed later
        {name: 'Zombsroyale'},
        {name: 'Bruh'},
        {name: 'Krunker'},
        {name: 'Shellshock'},
        {name: 'Diep'},
        {name: 'Tanked'},
        {name: 'Gats'},
        {name: 'Warbot'},
        {name: 'Counterstroke'}
      ];
      $scope.openurl = function(url){
        if(window.parent == window.top) {
          //If outside
          window.open(url, "_blank"});
        } else {
          //If inside
          window.open(url, '_parent');
        }
      };
    }]);

Главное здесь - проверка url и ng-click ="openurl(r1.url.$valid == true ? 'http://' + r1.name '.io' : 'https://' + r1.name + '.io')"

Я не знаю, почему это не такне работает, он откроет всплывающее окно, но полностью проигнорирует троичные параметры и параметры $ valid ...
Я попытался поменять
- .$valid==true
w /
- .$valid==false
но я получаю тот же результат!Почему это не работает?

Отлично подойдет пример работы с plunkr, jsfiddle или codepen и т. Д.

1 Ответ

0 голосов
/ 04 октября 2018

После долгих часов поиска ... Я наткнулся на Этот Веб-сайт ... После реализации код будет выглядеть так:

Index.html изменяется

ng-click="openurl(r1.url.$valid==true?r1.url:'https://' + r1.name + '.io')"
до
ng-click="is_url(r1.name+'.io')"

protractor.js изменения / дополнения

{name: 'Surviv', url: 'https://google.com'},
до
{name: 'Surviv'},

внутри основного контроллера:
добавьте:

$scope.is_url = function(str) {
        regexp =  /^(?:(?:https?|ftp):\/\/)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:\/\S*)?$/;
        if (regexp.test('https://' + str))
        {
            chrome.windows.create({url: 'https://' + str, type: "popup"});
        }
        else
        {
            chrome.windows.create({url: 'http://' + str, type: "popup"});
        }
};

Я использовал window.open впредыдущий пример / использование
С тех пор я изменил его на chrome.windows.create
, чтобы использовать это с window.open -
изменить {url: 'http://' + str, type: "popup"} Или {url: 'https://' + str, type: "popup"}

на: 'http://' + str, "_blank" Или'https://' + str, "_blank".

Это заняло слишком много часов поиска в Google ... Надеюсь, все, кто когда-либо сталкивался с этой проблемой, теперь найдут более простой способ использования ...

...