javascript - 如何重定向到 SPA 中带有下拉菜单的页面?

标签 javascript angularjs

我对如何使用下拉菜单将用户重定向到另一个 View 感到有点困惑。这是我在 html 或 js 中更改的内容吗?

编辑:

在使用“MainController”之前,必须设置它所需的所有数据,因为它仅在 HTML 中通过占位符术语表示。 AngularJS 通过查看 HTML 并在 HTML 中查找“ng”前缀(例如“ng-model”和“ng-options”)来实现此目的。请记住,单词“template”和“templates”是 html 中的 id,它们直接绑定(bind)到 angularJS 标签。例如,您可以有 ng-model="foo"ng-options="bar"

ng-model是一种数据绑定(bind),它将 html 的值(文本、用户输入、用户选择的文本)绑定(bind)到应用程序数据(您在屏幕上看到的内容)。

$scope 是应用程序本身,可以访问页面上的所有 html 和 js,这通常是正确的,因为 ng-app 通常放在页面的根元素 <html ng-app="app">

有了这个,我就可以开始解释这一切如何与下拉菜单联系起来了!

在我们的例子中,我们看到下拉菜单元素包含

ng-model="template"

ng-options="t as t.name for t in templates"

和一个名为 form-control 的引导类。我们的下拉菜单的元素将存储在 angularJS 对象数组中,而不是 html 本身。当网站加载时,我们的 AngularJS 会将 html 注入(inject)带有 ng 前缀的标签中,并且它会像我们写出的那样呈现

<select class="form-control" id="foo">
    <option>bar1</option>
    <option>bar2</option>
    <option>bar3</option>
    <option>bar4</option>
</select>

用AngularJS表示如下。

<select id="form_filter" class="form-control"
              ng-model="template"
              ng-options="t as t.name for t in templates">
</select>

以下是这两个函数实际用途的简要说明。

显示内容 = ng-model="template"

要显示的内容 = ng-options="t as t.name for t in templates"

$scope.templates 定义 ng-options ,

$scope.template 由 $scope.templates 内的对象数组定义,

“名称”是用户在给定下拉项上看到的内容,

“url”是被ng-app调用并注入(inject)到当前页面的html片段,

本地 html 文件的内容被注入(inject)到页面 <div ng-include='template.url'></div> ,

“controller”是 url 中找到的 html 的 Controller 名称,它也在 ng-app=app 的范围内。 ,

主 Controller 需要知道注入(inject)的 html 中 Controller 的名称来创建 2 路数据绑定(bind)。

app.config(["$routeProvider", function($routeProvider){  // This attaches the controller with the corresponding html that the user selects
    $routeProvider.
    when("../opencv/MakeGray/MakeGray.html",{
        controller: "MakeGray"
    }).
    when("../opencv/Canny/Canny.html",{
        controller: "Canny"
    });

}]);

最后,这允许进行一些图像处理。

mainController passes an image to the template.controller template.controller processes the base64 string image and posts it

虽然这有点多余,但请记住,您可以通过 $routeProvider 加载完全不同的 Controller 。和MainController .

例如,$routeProvider可以附上controller: MakeGray_morecontrols它在标准 controller: MakeGray 上注入(inject)了更多按钮/控件

这是下拉操作的视频。

https://www.youtube.com/watch?v=JwDSwzqi1Co

JS

app.controller('MainController',['$scope', '$http', 'API', function($scope, $http, API){
    $scope.imageUrl = "";

    $scope.template = "";
    $scope.templates =[

    {name: 'select an option...'},
    {name: 'MakeGray', url:'../opencv/MakeGray/MakeGray.html', controller: "MakeGray"},
    {name: 'Canny', url:'../opencv/Canny/Canny.html', controller: "Canny"},

    ];    

    $scope.template = $scope.templates[0];  

    // DISPLAY PROCESSED

    // UPLOAD IMAEGS : if upload button is pushed image is shown to user and image is uploaded to server for use
    $scope.UploadFile = function() 
    {
    var form_img    = document.getElementById('form_img').files[0];  // name of image   
    var form_filter = document.getElementById('form_filter').value;

    if (form_img.size < 20000000) //2mb
    { 
        if (
        form_img.type === "image/jpeg" ||      // Add image or video types as needed
        form_img.type === "image/jpg"  ||
            form_img.type === "image/png"  ||
            form_img.type === "image/bmp"  )
        {

        var ReadImage   = new FileReader();
        ReadImage.onloadend = function(Image)
        {

            var img      = Image.target.result;   // convert image from user to base64
            var imgsize  = Image.total;            
            var imgname  = Math.random() + "_" + form_img.name; // create unique id

            var filter   = form_filter;
            var formData = new FormData();

            $("#img1").prop("src", img);  // Display image

            formData.append("img", img);
            formData.append("imgsize", imgsize);
            formData.append("imgname", imgname);
            formData.append("filter", filter);

            API.uploadImage(formData)
            .success(function (imgUrl)
                 {
                     $scope.imageUrl = imgname;
                 })
            .error (function (error){});

        }
        ReadImage.readAsDataURL(form_img);
        }
        else {alert("FILE IS NOT AN IMAGE");}
    }
    else {alert("IMAGE IS TOO LARGE");}
    }

}]);

HTML

<body ng-controller="MainController">

    <div class="row">

      <div class="col-md-20">
    <div id="main">
      <form class="form-horizontal" role="form">
        <label class="control-label col-md-2">Filter List:</label>
        <div class="col-md-5">

          <select id="form_filter" class="form-control"
              ng-model="template"
              ng-options="t as t.name for t in templates">
          </select>

        </div>
      </form>
    </div>
      </div>
    <!-- rest of the page ..............-->
</body

最佳答案

你有下拉菜单吗?

我会在 HTML 中创建一个:

<select ng-options="filter for filters in filters"
                     ng-model="filter"
                     ng-change="letsGoToANewPage(filter)">
<option value="">Select Option</option>
</select> 

和你的 JavaScript:

$scope.letsGoToANewPage = function(filter){

    if(filter === "Canny"){
    window.location.href = "http://mywebsite.com"
    }

};

关于javascript - 如何重定向到 SPA 中带有下拉菜单的页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33955925/

相关文章:

javascript - 为什么我不应该在reactjs中使用getBoundingClientRect()?

php - 构建 JavaScript 对象 PHP 循环时缺少字符

angularjs - 使用angularjs在剑道调度程序上自定义删除确认弹出窗口

angularjs - 如何在angularjs中使用正则表达式

javascript - React Js 和 Node Js 如何使用相同的端口?

javascript - UNDEFINED - 来自 PHP 和 jQuery AJAX 的多个返回值

javascript - Dropzone 未定义,在 symfony 上使用 webpack

angularjs - 如何将上传的 csv 转换为 angularjs 中的 json 对象

javascript - 简单的 jQuery 星级评分和 AngularJs (ng-repeat)

angularjs - 如何隐藏 Angularjs 源代码?