Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.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
Angularjs 角度控制器负载()_Angularjs_Ng Bind_Angular Controller - Fatal编程技术网

Angularjs 角度控制器负载()

Angularjs 角度控制器负载(),angularjs,ng-bind,angular-controller,Angularjs,Ng Bind,Angular Controller,这对很多人来说都是琐事,但我以前从来没有和angular一起工作过,我需要帮助来完成一项简单的任务,因为我被绊倒了 My ng controllerprocessctrl声明了一个load()方法。 我的视图有两个对ng controller=“processoctrl”的调用,导致load()方法运行两次processctrl还有一个属性currentPhase,该属性启动null并设置其值。我可以编写($scope.currentPhase | | load())来防止双重load(),但是

这对很多人来说都是琐事,但我以前从来没有和angular一起工作过,我需要帮助来完成一项简单的任务,因为我被绊倒了

My ng controllerprocessctrl声明了一个
load()
方法。 我的视图有两个对
ng controller=“processoctrl”
的调用,导致
load()
方法运行两次processctrl还有一个属性currentPhase,该属性启动null并设置其值。我可以编写
($scope.currentPhase | | load())
来防止双重
load()
,但是绑定到currentPhase发生在中继器的顶部(在DOM中)

我可以将一个对象属性放入$rootScope并从processoctrl.scope.load()更新它,但它会变成一种疯狂

我可以简单地将$($(“.headerCurrentPhase”)[0]).html($scope.currentPhase)放入我的load()方法中,但这也太疯狂了

我可以将
load()
重写到
getProcesses=function(){}
$rootScope.$emit('getProcesses',{})
其他地方和控制器
$rootScope.$on('getProcesses',getProcesses)
来防止这种双重
load()
,但我认为这是多余的,那么,如何简单地调用控制器函数而不是load()?或者如何完成这个简单的任务?使用指令

视图:


是否真的需要2个包含项

若概览标题在视图之间共享,那个么我们可以在$rootScope级别拥有currentPhase,或者拥有一个父级控制器并拥有它


如果overview header仅用于此视图,那么我们可以将两个HTML合并为一个,并在包装标记处使用processctrl。

伙计,我不知道你想做什么,但我想给你一些建议:

  • 你的逻辑真的很复杂,你应该重新思考,因为现在很糟糕

  • 包括在角吸也。真正地你根本不应该用它。如何避免呢?嗯,有两个选择

    • 首先是使用客户端路由(对于页面);与其使用内置路由,不如使用。您将能够使用嵌套状态和路由
    • 第二种方法是使用指令而不是包含。真的,想象一下——页眉或页脚都可以是指令,需要时可以包含在页面中
  • 对我来说-我同时使用第一个和第二个解决方案

  • 您应该避免在
    $rootScope
    中放入任何内容。也许这不会杀了你,有时这是唯一的解决办法,但是,你知道,这是一个糟糕的做法

  • 如果您需要存储数据并在控制器之间共享数据,最好选择美国工厂(或其他服务,但工厂最通用)

  • 例如:

    app.factory('MyFactory', function () {
        return {
            myData: 'some default value',
            someCommonFuction: function (a, b) {
              return a + b;
            }
        };
    });
    

    除了数据存储,您还可以使用factory作为实用程序类,使用通用函数

    我决定将这些东西抽象起来。今天我们卸下了一个baseController和一个像模型一样的工厂原型。明天我们将对服务进行抽象(得到许多1-1控制器服务,查询列表项的相同端点)。谢谢你的回复,谢尔盖。你认为我的路线好吗?我的意思是,欢迎任何建议。@egidiocs你知道,很难提出任何建议,但你可以看看我的旧回购协议,也许它能帮助你:谢谢你@Sagar,我选择了这个设计。
    <div class="col-md-12">
    ....
        <h4><strong>currentPhase</strong></h4>
        <p ng-controller="processoctrl">
           <span class="label label-primary headerCurrentPhase" ng-bind="currentPhase"></span>
        </p>
    </div>
    
    <tbody ng-controller="processctrl">
        <tr ng-repeat="Process in Processes|orderBy:'ID'">
            <td>{{Process.isCurrent}}</td>
            <td>{{Process.isCurrent}}</td>
            <td>{{Process.ID}}</td>
            <td>{{Process.Title}}</a></td>
        </tr>
    </tbody>
    
    (function (app) {
       app.controller('processctrl', function ($scope, $rootScope, $routeParams, factorysvc) {
           $scope.Processes = [];
           $scope.currentPhase = null;
           load();
    
           //($scope.currentPhase || load())
    
           function load() {
                var promiseGet = factorysvc.getPsby($routeParams.itemId);
    
                promiseGet.then(function (data) {
    
                    $scope.Processes  = data;
    
                    $rootScope.root.empreendimento.currentPhase = $scope.currentPhase = data[0].currentPhase.Title;
    
                }, function (err) {
                    $scope.Message = "Error " + err.status;
                });
    
        }
    
    })}(angular.module('sgaapp')));
    
    app.factory('MyFactory', function () {
        return {
            myData: 'some default value',
            someCommonFuction: function (a, b) {
              return a + b;
            }
        };
    });