理解Angularjs中的$scope机制

理解Angularjs中的$scope机制,angularjs,angularjs-scope,Angularjs,Angularjs Scope,我无法为自己澄清如何在Angularjs中处理$scope。虽然我已经用其他方式解决了当前的问题,但我仍然需要帮助来理解$scope的用法 我有以下表格(本例简化)。Index.html: <form class="form-horizontal" ng-controller="AddItemController as addItemCtrl"> <fieldset> <legend>New item</legend> <

我无法为自己澄清如何在Angularjs中处理$scope。虽然我已经用其他方式解决了当前的问题,但我仍然需要帮助来理解$scope的用法

我有以下表格(本例简化)。Index.html:

<form class="form-horizontal" ng-controller="AddItemController as addItemCtrl">
  <fieldset>
    <legend>New item</legend>
    <div class="form-group">
      <label for="submittedBy" class="col-lg-2 control-label">Submitted by</label>
      <div class="col-lg-10">
        <input type="text" class="form-control" id="submittedBy" ng-model="addItemCtrl.item.submitted_by" placeholder="Your name here">
      </div>
    </div>
    <div class="form-group">
      <div class="col-lg-10 col-lg-offset-2">
        <!--button class="btn btn-default">Cancel</button-->
        <button type="submit" class="btn btn-primary" ng-click="addItemCtrl.addItem()">Submit</button>
      </div>
    </div>
  </fieldset>
</form>
我只想从表单中获取数据,将其发送到服务器,获取响应,更新表,然后清除表单。最后一部分是我的问题。我现在使用
this.item={}
来处理它。但是我确实想用$scope调用它,所以它应该是
$scope.item={}
,然后我想把它移到
addItem
函数中。不幸的是,这两种情况都不起作用

我有这个代码,它是按预期工作的,但似乎我只是运气好/运气不好,使它没有理解的机制

app.controller('ItemController', ['$scope','$http', function ($scope, $http) {
    function getItems(){
        $http({
                url: "get_items",
                method: "GET"
             }).
            success(function(data, status, headers, config) {
                $scope.items = data;
            });
    }
    getItems();
}]);`
更新。这就是我的AddItemController目前的样子:

app.controller("AddItemController", ['$scope','$http', function ($scope, $http) {
    $scope.item = {};

    this.addItem = function() {
        $http({
            url: "add_item",
            method: "GET",
            params: this.item
         }).
        success(function(data, status, headers, config) {
            $scope.$$prevSibling.items = data;
            $scope.addItemCtrl.item={};
        });
    }
}]);

它就像我想要的那样工作。但是我不喜欢
$scope.$$previsibling.items=data语句,我用它来刷新由ItemController处理的表,有没有更优雅的方法呢?

您不必使用getItem函数,您只需编写$http代码,它就可以正常工作,大约$scope,只是不要使用它,这里有点棘手,所有要生成的变量都只需使用$scope,然后像这样从$scope中获取

   $scope.item;
   $scope.item.getItem = function(){};
   var item1 = $scope.item;

诸如此类。

因为每个控制器都创建了自己的$scope,这就是为什么您要搞乱它,您要在其他控制器中更改数据scopes@NarekMamikonyan你的意思是:
var scope=angular.element($(“#body”)).scope()
scope.items=数据如果是这样,我已经在示例中重命名了它,这样它就不会与我的主issue@NarekMamikonyan那我就跟不上你了
ItemController
负责该表,并使用其
$scope
工作正常
AddItemController
是为表单处理实现的,因此是的,它应该使用
$scope拥有自己的
$scope
。成功回调中的item={}
应该可以工作。你确定问题出在那个电话上吗?控制台中有任何错误吗?@bmleite它说有一个对象$scope,但是什么也没有发生,并且在我放置
$scope.item={}
关于getItem的任何地方都没有显示错误。我知道,我只是在玩语法,在某个时候想将getItem移到外部,以便从其他控制器获得它。但我失败了,所以现在就这样,直到我重新开始。
   $scope.item;
   $scope.item.getItem = function(){};
   var item1 = $scope.item;