Angular如何以正确的方式从服务中设置范围变量?

时间:2014-10-27 09:12:13

标签: javascript angularjs 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
             }
         });
     };

3 个答案:

答案 0 :(得分: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>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

第一种方法:

在服务中:

serviceMethod: functon(scope){
   //processing
   scope.scopeVar=data;
}
控制器中的

  service.serviceMethod($scope);

当控制器调用serviceMethod的{​​{1}}时。处理数据后,将其分配给scope.scopeVar.here service引用$ scope对象。(我们将对象$ scope传递给scope方法)

第二种方法 -

在服务中:

serviceMethod
控制器中的

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

答案 2 :(得分:0)

你没有&#34; set-scope-variable-from-service&#34;你绑定它。它真的是一样的语义。 @sss是完全正确的