Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.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
Javascript 角度Js$范围_Javascript_Jquery_Angularjs_Scope - Fatal编程技术网

Javascript 角度Js$范围

Javascript 角度Js$范围,javascript,jquery,angularjs,scope,Javascript,Jquery,Angularjs,Scope,在页面加载过程中,当建立控制器并将$scope设置为使用工厂方法(用于get和POSTs)时,将触发my POSTs。下面是一个代码示例。为了解决这个问题,我将“POST”包装在jqueryclick事件函数中,一切都很顺利。下面是代码 在控制器(app.js)中: 所以,这里发生的事情是,如果我取消注释$scope.addDepartment=。。。在页面加载时,将调用postDepartments()工厂方法。这不是期望的行为。以下是如何连接Html Dom元素: <button id

在页面加载过程中,当建立控制器并将$scope设置为使用工厂方法(用于get和POSTs)时,将触发my POSTs。下面是一个代码示例。为了解决这个问题,我将“POST”包装在jqueryclick事件函数中,一切都很顺利。下面是代码

在控制器(app.js)中:

所以,这里发生的事情是,如果我取消注释$scope.addDepartment=。。。在页面加载时,将调用postDepartments()工厂方法。这不是期望的行为。以下是如何连接Html Dom元素:

<button id="myButton" data-ng-click="addDepartment()">Add Department</button>
添加部门
因此,如果我像上面所说的那样取消注释,它会在用户单击按钮之前添加部门。但是,以jQuery的方式处理它,没有问题

这是已知的bug吗?这是预期的功能吗?另外,看看下面的工厂,也许问题就在那里

demoApp.factory('simpleFactory', function ($http) {

    var departments = [];

    var factory = {};

    factory.getDepartments = function () {
        $http.get('/Home/GetDepartments').success(function (data) {
            for (var i = 0; i < data.length; i++) {
                departments.push({ desc: data[i].desc, id: data[i].id });
            }
        })
        .error(function () {
            $scope.error = "An Error has occured while loading posts!";
            $scope.loading = false;
        });
        return departments;
    };

    factory.postDepartments = function () {
        $http.post('/Home/PostDepartment', {
            cName: 'TST',
            cDescription: 'Test Department'
        }).success(function (data) {
            departments.push({ desc: 'Test Department', id: departments.length + 1 });
        })
        .error(function () {
            $scope.error = "An Error has occured while loading posts!";
            $scope.loading = false;
        });
        return departments;
    };

    return factory;
});
demoApp.factory('simpleFactory',函数($http){
var部门=[];
变量工厂={};
factory.getDepartments=函数(){
$http.get('/Home/GetDepartments').success(函数(数据){
对于(变量i=0;i
试试这个:

$scope.addDepartment = function() {
    return simpleFactory.postDepartments();
}
这也将允许您在将来传递参数,如果您决定这样做的话。按照最初的方式,您同时分配函数和调用函数

然后,您可以在ngClick中使用它:

<button ng-click="addDepartment()">Add Department</button>
添加部门

不要在控制器中使用jQuery
click
方法,它会破坏将关注点分为模型、视图、控制器等的目的。这就是指令的用途。

如果在初始化时不需要,为什么要使用init函数?
<button ng-click="addDepartment()">Add Department</button>