Maison  >  Questions et réponses  >  le corps du texte

angular.js - angular中factory里可以操作controller里的数据吗

我想在factory中获取并改变顶级控制器里的变量 可以办到吗

PHP中文网PHP中文网2714 Il y a quelques jours570

répondre à tous(3)je répondrai

  • 習慣沉默

    習慣沉默2017-05-15 17:08:12

    Généralement, lorsque je travaille sur un projet, les services servent à deux fins :
    Premièrement, ils sont utilisés comme méthodes publiques, telles que les méthodes de soumission, certains services dans les boîtes contextuelles et d'autres services généraux similaires.
    Deuxièmement, il est utilisé lors du transfert de paramètres ou d'objets entre certains contrôleurs en fonction de besoins particuliers. Cette situation est rare et n'est généralement pas recommandée~

    .

    Quand vous avez parlé de changer les variables du contrôleur de niveau supérieur dans le service, j'ai l'impression que vous avez fourni un fragment de votre idée, plutôt que le point de demande fondamental~ Quelle est votre demande ?

    répondre
    0
  • 某草草

    某草草2017-05-15 17:08:12

    Il ne peut pas être utilisé directement, il existe deux manières :
    1. Modifiez la valeur via la fonction de rappel
    2 Modifiez la valeur en passant les paramètres de l'objet (tableau, objet)

    .
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
    </head>
    <body ng-app="myApp" >
    <p ng-controller="myCtrl">
    {{ value.name }} {{ value.value }}
    </p>
    <hr />
    <p ng-controller="myCtrl2">
    {{ value.name }} {{ value.value }}
    </p>
        
    <script>
    var app = angular.module('myApp', []);
    
    app.service('myService', function() {
        this.valueSet = function(value){
            this.valueFunction(value);
        };
        this.valueCallback = function(callback){
            var newValue = {
                name : "hello",
                value : "world"
            };
            this.valueFunction(newValue);
            callback(newValue);
        };
        this.valueFunction = function(value){
            value.name += ",";
            value.value += "!";
            return value;
        };
    });
    app.controller('myCtrl', ['$scope', 'myService', function($scope, myService) {
        $scope.value = {
            name : "你好",
            value : "世界"
        };
        //回调方式改版 $scope 的值
        myService.valueCallback(function(value){
            $scope.value = value;
        });
    }]);
    app.controller('myCtrl2', ['$scope', 'myService', function($scope, myService) {
        $scope.value = {
            name : "你好",
            value : "世界"
        };
        myService.valueSet($scope.value);
    }]);
    </script>
    
    </body>
    </html>
    

    répondre
    0
  • 漂亮男人

    漂亮男人2017-05-15 17:08:12

    C'est possible, mais pas recommandé.
    Encapsulez les données du contrôleur dans un objet, puis transmettez-les en tant que paramètre à la méthode d'usine.

    répondre
    0
  • Annulerrépondre