2014-10-27 57 views
2

我想從服務方法返回值範圍到模板中的使用和處理。Angular如何以正確的方式從服務設置範圍變量?

但我發現,我不能在服務中使用範圍。 我可以使用Rootscope,但我認爲這是不正確的做法。

如何輕鬆將服務中的值設置爲範圍?

感謝您的任何建議。

這裏是代碼:

/** 
     * Init autocomplete dropdown menu for project list 
     */ 
    this.getProjectListForAutocomplete = function (container, options) { 
     $("#autocompleteProjects").kendoAutoComplete({ 
      dataSource : { 
       type: "json", 
       serverFiltering: true, 
       transport: { 
        read: function (options) { 
         console.log("List"); 
         console.log(options.data); 

         ApiService.doHttpRequest(
          "POST", 
          $rootScope.apiBaseUrl + "gpsaddress/search", 
          requestParams 
         ) 
          .success(function (data, status, headers, config) { 

             break; 
           } 
          }) 
          .error(function (data, status, headers, config) { 

          }); 
        } 
       } 
      }, 
      dataTextField: "city" , 
      dataValueField: "address.city", 
      filter: "contains", 
      minLength: 1, 
      change : function (e) { 
       console.log("change"); 
       //console.log(e); 
      }, 
      select : function (e) { 
       console.log("select"); 
       var dataItem = this.dataItem(e.item.index()); 
       console.log(dataItem); 
       // Here i need set scope in controller 
      } 
     }); 
    }; 
+1

爲什麼不在服務中返回類型方法並在控制器中捕獲範圍內的返回值? – 2014-10-27 09:18:14

+0

在服務中修改範圍對象將是一個糟糕的設計,因爲控制器需要與範圍進行交互,並且服務旨在獨立於UI和範圍 – 2014-10-27 09:22:43

+0

@AnikIslamAbhi您可以添加一些示例嗎?我是Angular的新人。 – redrom 2014-10-27 09:24:55

回答

1

第一方法:

在服務

serviceMethod: functon(scope){ 
    //processing 
    scope.scopeVar=data; 
} 

在控制器:

service.serviceMethod($scope); 

當控制器呼叫serviceMethodservice。處理的數據被分配給scope.scopeVar.here scope後參閱$範圍對象(我們傳遞對象$範圍serviceMethod方法)

第二方法 -

在服務

serviceMethod: functon(){ 
    //processing 
    returndata; 
} 

在控制器:

$scope.scopeVar=service.serviceMethod(); 
+1

第一種方法只是不好的實現,不應該使用。第二種方法很好。還有第三種方法太常見了,服務返回的是承諾而不是實際的數據。這個例子也可以添加。 – Chandermani 2014-10-27 09:31:30

4

請參閱下面的演示:

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

 

 
app.service('dataService', function() { 
 

 
    var _person = { 
 

 
    name: "jack", 
 
    surname: "doe" 
 

 
    } 
 

 
    return { 
 
    person: _person 
 

 
    } 
 

 
}) 
 
app.controller('fCtrl', function($scope, dataService) { 
 

 
    $scope.person = dataService.person; 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<div ng-app="app"> 
 
    <div ng-controller="fCtrl"> 
 
    <p>First Name: {{person.name}}</p> 
 
    <p>Last Name: {{person.surname}}</p> 
 
    Edit First Name:<input type: "text" ng-model="person.name" /> 
 
    </div> 
 
</div>

+0

我更新了問題。代碼在哪裏想要設置範圍值是嵌套的。 – redrom 2014-10-27 09:48:06

+0

@redrom我有點困惑是你的控制器或服務的代碼?你想在哪個地方編輯你的變量和以哪種方式? – sylwester 2014-10-27 10:51:59

+0

它是從服務方法的代碼。我需要將JSON對象返回到寫入位置的範圍////這裏我需要在控制器中設置範圍 – redrom 2014-10-27 10:53:53

0

你不「設置範圍值變量從服務」綁定到它。它的語義真是一樣。 @sss是完全正確的