AngularJS控制器返回表单

AngularJS controller returns form

本文关键字:表单 返回 控制器 AngularJS      更新时间:2023-09-26

开发人员!

我决定尝试Angular,所以我想在MVC(或接近它)架构中制作一个简单的图像上传和编辑应用程序。

我一直停留在入口点,因为我真的不知道如何从模板中正确返回填充的main form

正如我现在所想的,我首先调用controller函数,然后它应该调用mainService函数,它构建表单,它使用"imageUploadController",它使用imageUploadService

但我有一天告诉我这样做是不好的。

我的主要问题是如何获得uploadImageForm.html,将其传递给index.html,其中没有链接或包含(我只想单独保存)确保那里的服务和控制器正常工作

在同样的情况下,最佳实践是什么样子的?

这是代码,希望它能帮助我更清楚地看到问题:

这是我的index.html

<!doctype html>
<html lang="en" ng-app="modernFilter">
  <head>
    <meta charset="utf-8">
    <title>Modern.Filters</title>
    <script src="asstes/libs/angular.min.js"></script>
    <script src="app/components/app.js"></script>
    <script src="app/shared/imageUploadController.js"></script>
  </head>
  <body ng-controller = "mainController">
    <span>{{mainForm}}</span>
  </body>
</html>

这是app.js

'use strict';
// Define the `modern.filter` module
var modernFilterApp = angular.module('modernFilter', []);
//  Define main controller
modernFilterApp.controller('mainController', ['$scope', function($scope, mainService){
    // Stores form data
    $scope.mainForm = null;
    // Returns main form template
    $scope.getMainForm = function(){
        $scope.mainForm = mainService.getMainForm();
    }
    // Call function on documentready
    angular.element(document).ready(function () {
        $scope.getMainForm();
        //todo: is it even okay? but without it nothing happens
        $scope.$apply();
    })
}]);
// Define service
modernFilterApp.service('mainService', function(mainService){
    this.getMainForm = function(){
        // todo: how should I get template here?
        return "filled form template from here"
    }
});

我还得到了模板imageUploadView

<div ng-controller="imageUploadController">
<canvas id="imageCanvas"></canvas>
<form action="">
    <input my-upload type="file" name="upload" onchange="angular.element(this).scope().uploadImage()">
</form>

Cotroller及其服务(带有示例代码,仍在调试)

modernFilterApp.controller('imageUploadController', ['$scope', 'imageUploadService', function($scope, imageUploadService) {
  // Stores image
  $scope.image = null;
  // Returns main form template
  $scope.uploadImage = function() {
    $scope.image = imageUploadService.handleImage(arguments);
  }
}]);
//  Define upload service
modernFilterApp.service('imageUploadService', function(imageUploadService) {
// Function handles uploaded files (dirty code)
this.handleImage = function(event) {
  var canvas = angular.element('#imageCanvas'),
    context = canvas.getContext('2d'),
    reader = new FileReader(),
    img = new Image();
  canvas.width = img.width;
  canvas.height = img.height;
  context.drawImage(img, 0, 0);
  img.src = event.target.result;
  return reader.readAsDataURL(e.target.files[0]);
}
}]);

不要试图从控制器中获取模板。

您需要使用指令。制作指令,其控制器为imageUploadController,模板为imageUpload View,并将其包含在index.html 中

您的html:-

<body ... >
  <my-directive></my-directive>
</body>
//include directive file,controller files

指令:-

    .directive('myDirective', ['your service',function(your service) {
  return {
    restrict: 'E',
    transclude: true,
    scope: {},
    templateUrl: 'template url',
    link: function (scope) {
    },
    controller : function($scope){
    //your controller
    }
  };
}]);

请参阅此处

Html将自动呈现以代替指令