编译时调用Angular值函数

时间:2014-12-09 22:37:57

标签: angularjs

问题的示例代码 Is Here

我有一些字段的计算数据。我在我的示例中使用“总计”方法获取数据。我知道当控制器初始化一次然后再次获取值本身时,将调用该函数。但是我意识到当按下单击按钮执行编译功能时,每次调用“total”函数两次。总计与编译或编译中使用的数据无关。这些无用(我的情况:))调用的原因是什么?

// JS CODE

var myApp = angular.module('myApp',[]);

function MyCtrl($scope) {
$scope.val1 = 1;
$scope.val2 = 2;

$scope.serverData = 99;



$scope.total = function() {
   console.log('I am total');
    return $scope.val1 + $scope.val2;
}



$scope.compileData = function(){
    var injector = angular.element($('#serverDataHere')).injector(), 
        compile =injector.get('$compile');

      $('#serverDataHere').append(compile('<div>{{serverData}}</div>')($scope));

};

}

//// HTML CODE

    <div ng-controller="MyCtrl">
    <table border="1">
        <tbody>
            <tr>
                <td>{{val1}}</td>
                <td>{{val2}}</td>
                <td>{{total()}}</td>
                <td>{{total()}}</td>
                <td>{{total()}}</td>
            </tr>
            <tr>
                <td>Computer</td>
                <td>Computer</td>
                <td>Computer</td>
                <td id="serverDataHere"></td>
                <td>X Games</td>
            </tr>
        </tbody>
    </table>
    <button ng-click="compileData()">Compile Data</button>
</div>

2 个答案:

答案 0 :(得分:0)

您正在开始一个摘要周期,在您的网页上运行所有评估。 {{ }}

另一方面,您不应该在控制器中执行DOM操作,这就是存在指令的原因。 也没有理由直接从模块访问$ injector,$ compile或任何服务。你应该使用标准注射Angular注入它们。

myApp.controler('controllerName', function($scope, $compile) {
    return ctrlFunctions;
});

答案 1 :(得分:0)

(不确定我是否理解你的问题。)

但是您可以在控制器中运行一次total()函数,将其分配给范围变量,然后将其绑定到视图。

var totalFcn = function() {
    console.log('I am total');
    return $scope.val1 + $scope.val2;
}

$scope.total = totalFcn();

然后在你的视图中,只需输入total变量而不是函数调用。

<td>{{total}}</td>