如何以正确的方式从服务中设置作用域变量

Angular how to set scope variable from service in right way?

本文关键字:服务 设置 作用域 变量 方式      更新时间:2023-09-26

我希望将服务方法的值返回到模板中使用和处理的范围中。

但我发现,我不能在服务中使用scope。我可以使用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
             }
         });
     };

请参阅下面的演示:

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>

第一种方法:

在役:

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

在控制器中:

  service.serviceMethod($scope);

当控制器调用CCD_ 2的CCD_。处理后的数据被分配给scope.scopeVar.here scope指的是$scope对象。(我们将对象$scope传递给serviceMethod方法)

第二种方法-

在役:

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

在控制器中:

  $scope.scopeVar=service.serviceMethod();

您不需要"从服务设置作用域变量",而是绑定到它。这实际上是相同的语义@sss是完全正确的