搜尋

首頁  >  問答  >  主體

angular.js - angular中factory裡可以操作controller裡的資料嗎

我想在factory中取得並改變頂級控制器裡的變數 可以辦到嗎

PHP中文网PHP中文网2744 天前592

全部回覆(3)我來回復

  • 習慣沉默

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

    一般我在做專案的時候,服務就做倆用途:
    第一,是作為公共方法,例如提交方法,彈出框的某些服務等等類似的通用的服務。
    第二,是根據特殊的需求在某幾個控制器之間傳遞參數或物件時候使用,這種情況很少,一般也不推薦~

    你說的在服務中去改變頂級控制器的變量,我感覺你是提供了你思路上的一個片段,而不是根本需求點~你的需求是什麼?

    回覆
    0
  • 某草草

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

    沒法直接操作,有兩種方式:
    1、透過回呼函數的方式改變值
    2、透過傳對象參數的方式改變值(array,object)

    <!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>
    

    回覆
    0
  • 漂亮男人

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

    可以是可以,但是不推薦。
    將controller的資料封裝到一個物件裡,然後當作參數傳到factory的方法裡就可以了。

    回覆
    0
  • 取消回覆