Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
$rooteScope不';我不能在AngularJS工作_Angularjs - Fatal编程技术网

$rooteScope不';我不能在AngularJS工作

$rooteScope不';我不能在AngularJS工作,angularjs,Angularjs,有人请告诉我如何解决这个问题。在我的主文件中,我使用startEdit($index)函数获取必须更改的输入值,并将我重定向到/edit-partial。在这里,我在输入框中键入一个新文本,并使用save()保存新值,然后将我重定向回主视图,在那里我可以看到新文本 问题是,我没有在save()函数中获得$rootScope.siteBox;的新值。我得到了相同的旧值,即使在$watch函数中,我也可以看到变量在变化 我尝试了很多解决办法,但没有结果。有人帮我一下,告诉我怎么了 JS文件

有人请告诉我如何解决这个问题。在我的主文件中,我使用startEdit($index)函数获取必须更改的输入值,并将我重定向到/edit-partial。在这里,我在输入框中键入一个新文本,并使用save()保存新值,然后将我重定向回主视图,在那里我可以看到新文本

问题是,我没有在save()函数中获得$rootScope.siteBox;的新值。我得到了相同的旧值,即使在$watch函数中,我也可以看到变量在变化

我尝试了很多解决办法,但没有结果。有人帮我一下,告诉我怎么了

JS文件

    angular.module('maintenance', ['ngRoute'])
    .controller('siteEditCtrl', SiteEditCtrl)
    .controller('mainCtrl', MainCtrl)
    .controller('addCtrl', AddCtrl)
    .controller('editCtrl', EditCtrl)
    .controller('deteleCtrl', DeteleCtrl)
    .config(function($routeProvider) {
        $routeProvider.
        when('/', {
            templateUrl: 'views/lists.html', 
            controller: 'mainCtrl'
        })
        .when('/add', {
            templateUrl: 'views/add.html',
            controller: 'addCtrl'
        })
        .when('/edit', {
            templateUrl: 'views/edit.html',
            controller: 'editCtrl'
        })
        .when('/detele', {
            templateUrl: 'views/detele.html',
            controller: 'deteleCtrl'
        })
        .otherwise({
            redirectTo: '/'
        });
    });

function SiteEditCtrl($scope, $location, $rootScope) {
    $rootScope.sites = sites;
    $rootScope.selected = -1;

    $scope.startAdd = function() {
       $location.path( "/add" );
    };

    $scope.startEdit = function(index) {
        $rootScope.selected = index;
        $rootScope.siteBox = $rootScope.sites[index];
        //console.log($rootScope.siteBox);
        $location.path( "/edit" );
    };
}

 function EditCtrl($scope, $location, $rootScope) {
    $scope.$watch('siteBox', function(newValue, oldValue) {
        //console.log(oldValue);
        //console.log(newValue);
    });
    $scope.save = function() {
        console.log($rootScope.siteBox);
        $rootScope.sites[$rootScope.selected] = $rootScope.siteBox;
        $location.path( "#/" );
    };
}
配置中的主视图(/)


添加新的潜水
潜水地点一览表
{{$index+1}}:{{site}
编辑
删除
在配置中编辑视图(/Edit)

编辑潜水地点名称
拯救
取消

<代码> > P>在视图之间共享变量,考虑使用工厂/服务。您可以将站点存储在工厂中,并在必要时进行更新/检索。

这是违反for ng模型的典型案例

实际上,通过在标记中设置
ng model=“siteBox”
,当输入值发生更改时,会在
editCtrl
的作用域上设置
siteBox
属性,而不是在
$rootScope
上设置


相反,请在控制器代码中使用
$rootScope.data.siteBox
,在视图代码中使用
$rootScope.siteBox
/
siteBox
,以便在正确的对象上设置属性。确保尽早将
$rootScope.data
初始化为空对象。

为什么
$scope.startEdit()
是在另一个函数中定义的?我不确定您是否曾经在根作用域上设置过
siteBox
属性。@TimBiegeleisen所示的代码很好,是典型的Angular 1代码,尽管使用了旧的做法,例如将方法放在
$scope
上,而不是控制器实例上,但它可以工作。问题是与用于
ng model
的绑定表达式有关。如果我使用一个控制器,并且没有配置部分,那么一切都可以正常工作,但是没有部分。我正在学习angularjs,我不是专业人士。John,你在学习真是太好了。只要确保学习当前的最佳实践,比如使用组件而不是原始控制器,这样您就不会从一开始就学习过时的实践,以后也不必忘记它们。它不能与多个控制器和部分一起工作的原因是,每个控制器和部分都会向层次结构中添加一个新的作用域,这会破坏您的
ng模型
表达式。但是,当我使用$rootScope时,它不会对所有控制器都具有相同的值?我不知道如何在这里使用服务。我也试过了,相信我,但我想我没有设置它right@JohnSmith如果这将是一个大规模的应用程序,考虑改变iTo,我的朋友,这只是为了学习,这是几个功能是整个测试project@JohnSmithOK,然后考虑将$ROOTVICE变量分配给$范围变量,如果你能告诉我如何将这两个函数放入服务中,startEdit()和save(),我会感谢你,因为我的朋友遇到的问题是这两个函数之间的差异。我的朋友我试过你说的,但没有改变。我替换了值,但没有结果
         <div class="row">
            <div class="col-sm-12">
                    <a class="btn btn-primary btn-lg" ng-click="startAdd()">
                        Add new dive 
                    </a>
            </div>
        </div>
       <h2>List of Dive Sites</h2>
        <div class="row" ng-repeat="site in sites"
               ng-class="{oddRow: $index % 2 == 0}">
            <div class="col-sm-8">
              <h4>{{$index + 1}}: {{site}}</h4>
            </div>
            <div class="col-sm-4" style="margin-top: 5px;">
                <div class="pull-right">
                    <button class="btn btn-warning btn-sm" ng-click="startEdit($index)">
                      Edit
                    </button>
                    <button class="btn btn-danger btn-sm" ng-click="startRemove($index)">
                      Delete
                    </button>
                </div>
            </div>
        </div>
        <h3>Edit the dive site name</h3>
        <div class="row">
            <div class="col-sm-6">
                <input type="text" class="form-control input-lg" placeholder="site name" ng-model="siteBox">
            </div>
        </div>
        <div class="row" style="margin-top: 12px;">
            <div class="col-sm-6">
                <button class="btn btn-succes btn" ng-disabled="siteBox==''" ng-click="save()">
                    Save
                </button>
                <button class="btn btn-warning btn" ng-click="cancel()">
                    Cancel
                </button>
            </div>
        </div>