从工厂功能设置控制器范围变量的最佳实践?

时间:2015-09-11 20:27:37

标签: javascript angularjs

我有以下工作代码来设置控制器' HelloCtrl'范围变量' root'来自工厂' testFactory' function setRoot()。我使用ng-submit =" testSubmit()"使用ng-model =" test"在我的HTML中。我担心这不是最好的做法,你还会推荐什么?

angular.module('testApp', [])
.controller('HelloCtrl', function ($scope, testFactory, testService) {
        $scope.root='initial';
        $scope.testSubmit = function () {
            testFactory.setRoot($scope)
        }
    })
.factory('testFactory', function(){
        return {
            setRoot: function(scope){
                scope.root=scope.test

            }
        }
    })

1 个答案:

答案 0 :(得分:4)

执行所需操作的唯一方法是从工厂返回值,然后将此值绑定到$scope

angular.module('testApp', [])
  .controller('HelloCtrl', function ($scope, testFactory, testService) {

    $scope.root = 'initial';

    $scope.testSubmit = function() {
      $scope.root = testFactory.setRoot();
    }
  })
  .factory('testFactory', function() {
    return {
      setRoot: function() {
        return 'Some value';
      }
    }
  });

就像我在上一个问题中所说,$rootScope$scope不能从服务或工厂绑定。你应该利用它们的方式是从它们返回一个值,然后在控制器中使用它们。控制器应该与范围绑定,而不是服务或工厂。

在此示例中,$scope.root将使用testFactory.setRoot()返回的值进行更新,在本例中为'Some value'

以下是您可以用来更好理解的另一个问题:

Accessing $scope in AngularJS factory?